23 from matplotlib
import pyplot
as plt
35 from time
import gmtime, strftime
38 InitFileName = str(sys.argv[1])
39 print(
'Init file name: ' + InitFileName )
41 InitFileName =
'alice_init.ini'
43 if sys.version_info[0] == 2:
49 from tkFileDialog
import askopenfilename
50 from tkFileDialog
import asksaveasfilename
51 from tkSimpleDialog
import askstring
52 from tkMessageBox
import *
53 if sys.version_info[0] == 3:
55 import urllib.request, urllib.error, urllib.parse
59 from tkinter.filedialog
import askopenfilename
60 from tkinter.filedialog
import asksaveasfilename
61 from tkinter.simpledialog
import askstring
74 RevDate =
"3 Jan 2022"
76 Version_url =
'https://github.com/analogdevicesinc/alice/releases/download/1.3.12/alice-desktop-1.3-setup.exe'
79 R0lGODlhIAAgAHAAACH5BAEAAAIALAAAAAAgACAAgQAAAP///wAAAAAAAAJJhI+py+0PYwtBWkDp
80 hTnv2XlfEobjUZZnmn4se72vJMtcbYN4ruz44uORgiodsfI4Im++2M5VW81OmBbVULxiRVrUsgsO
85 root.title(
"ALICE DeskTop " + SWRev + RevDate +
": ALM1000 Oscilloscope")
86 img = PhotoImage(data=TBicon)
87 root.call(
'wm',
'iconphoto', root._w,
'-default', img)
88 print(
"Windowing System is " + str(root.tk.call(
'tk',
'windowingsystem')))
132 MouseX = MouseY = -10
133 MouseCAV = MouseCAI = MouseCBV = MouseCBI = MouseMuxA = MouseMuxB = MouseMuxC = MouseMuxD = -10
135 COLORframes =
"#000080"
136 COLORcanvas =
"#000000"
137 COLORgrid =
"#808080"
138 COLORzeroline =
"#0000ff"
139 COLORtrace1 =
"#00ff00"
140 COLORtrace2 =
"#ff8000"
141 COLORtrace3 =
"#00ffff"
142 COLORtrace4 =
"#ffff00"
143 COLORtrace5 =
"#ff00ff"
144 COLORtrace6 =
"#C80000"
145 COLORtrace7 =
"#8080ff"
146 COLORtraceR1 =
"#008000"
147 COLORtraceR2 =
"#905000"
148 COLORtraceR3 =
"#008080"
149 COLORtraceR4 =
"#808000"
150 COLORtraceR5 =
"#800080"
151 COLORtraceR6 =
"#800000"
152 COLORtraceR7 =
"#4040a0"
153 COLORtext =
"#ffffff"
154 COLORtrigger =
"#ff0000"
155 COLORsignalband =
"#ff0000"
156 ButtonGreen =
"#00ff00"
157 ButtonRed =
"#ff0000"
162 ColorMode = IntVar(0)
165 ButtonText =
"#000000"
170 LocalLanguage =
"English"
177 BaseSampleRate = 100000
178 AWGSAMPLErate = BaseSampleRate
179 SAMPLErate = BaseSampleRate
186 Slow_Sweep_Limit = 200
190 MathString =
"VBuffA[t] + VBuffB[t]"
192 MathXString =
"VBuffA[t]"
194 MathYString =
"VBuffB[t]"
196 UserAString =
"MaxV1-VATop"
197 UserALabel =
"OverShoot"
198 UserBString =
"MinV2-VBBase"
199 UserBLabel =
"UnderShoot"
203 AWGAMathString =
"(VBuffA + VBuffB)/2"
204 AWGBMathString =
"(VBuffA + VBuffB)/2"
205 AWGAcsvFile =
"examplea.csv"
206 AWGBcsvFile =
"exampleb.csv"
207 AWGAwavFile =
"examplea.wav"
208 AWGBwavFile =
"exampleb.wav"
209 FFTUserWindowString =
"numpy.kaiser(SMPfft, 14) * 3"
210 DigFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
211 DigFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
212 AWGFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
213 AWGFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
214 ChaMeasString1 =
"DCV1"
215 ChaMeasString2 =
"DCI1"
216 ChaMeasString3 =
"SV1"
217 ChaMeasString4 =
"MaxV1-MinV1"
218 ChaMeasString5 =
"MaxI1-MinI1"
219 ChaMeasString6 =
"math.sqrt(SV1**2 - DCV1**2)"
220 ChbMeasString1 =
"DCV2"
221 ChbMeasString2 =
"DCI2"
222 ChbMeasString3 =
"SV2"
223 ChbMeasString4 =
"MaxV2-MinV2"
224 ChbMeasString5 =
"MaxI2-MinI2"
225 ChbMeasString6 =
"math.sqrt(SV2**2 - DCV2**2)"
226 ChaLableSrring1 =
"CHA-DCV "
227 ChaLableSrring2 =
"CHA-DCI "
228 ChaLableSrring3 =
"CHA-TRMS "
229 ChaLableSrring4 =
"CHA-VP-P "
230 ChaLableSrring5 =
"CHA-IP-P "
231 ChaLableSrring6 =
"CHA-ACRMS "
232 ChbLableSrring1 =
"CHB-DCV "
233 ChbLableSrring2 =
"CHB-DCI "
234 ChbLableSrring3 =
"CHB-TRMS "
235 ChbLableSrring4 =
"CHB-VP-P "
236 ChbLableSrring5 =
"CHB-IP-P "
237 ChbLableSrring6 =
"CHB-ACRMS "
238 LabelPlotText = IntVar(0)
239 PlotLabelText =
"Custom Plot Label"
241 GridWidth = IntVar(0)
243 TRACEwidth = IntVar(0)
245 TRACEaverage = IntVar(0)
249 LPFTrigger = IntVar(0)
250 Trigger_LPF_length = IntVar(0)
251 Trigger_LPF_length.set(10)
252 HarmonicMarkers = IntVar(0)
253 HarmonicMarkers.set(3)
254 AWGShowAdvanced = IntVar(0)
255 AWGShowAdvanced.set(0)
256 AWG_Amp_Mode = IntVar(0)
258 AWGA_Ext_Gain = DoubleVar(0)
259 AWGA_Ext_Gain.set(1.0)
260 AWGA_Ext_Offset = DoubleVar(0)
261 AWGA_Ext_Offset.set(0.0)
262 AWGB_Ext_Gain = DoubleVar(0)
263 AWGB_Ext_Gain.set(1.0)
264 AWGB_Ext_Offset = DoubleVar(0)
265 AWGB_Ext_Offset.set(0.0)
267 Two_X_Sample = IntVar(0)
269 ADC_Mux_Mode = IntVar(0)
271 Last_ADC_Mux_Mode = 0
272 Alternate_Sweep_Mode = IntVar(0)
273 Alternate_Sweep_Mode.set(0)
275 ChopModeFilter = [0.25, 0.25, 0.25, 0.25]
278 Roll_Mode = IntVar(0)
281 ZEROstuffing = IntVar(0)
283 FFTwindow = IntVar(0)
286 RelPhaseCorrection = 15
287 RelPhaseCenter = IntVar(0)
288 RelPhaseCenter.set(0)
289 ImpedanceCenter = IntVar(0)
290 ImpedanceCenter.set(0)
291 MultipleBoards = IntVar(0)
292 MultipleBoards.set(0)
293 IgnoreFirmwareCheck = 0
296 EnablePhaseAnalizer = 1
297 EnableSpectrumAnalizer = 1
298 EnableBodePlotter = 1
299 EnableImpedanceAnalizer = 1
302 EnableCommandInterface = 0
305 EnableMinigenMode = 0
306 EnablePmodDA1Mode = 0
308 EnableGenericSerialMode = 0
309 EnableAD5626SerialMode = 0
310 EnableDigitalFilter = 0
311 EnableMeasureScreen = 0
314 EnableUserEntries = 0
315 AllowFlashFirmware = 0
317 ShowTraceControls = 0
331 CHA_TC1 = DoubleVar(0)
333 CHA_TC2 = DoubleVar(0)
335 CHB_TC1 = DoubleVar(0)
337 CHB_TC2 = DoubleVar(0)
339 CHA_A1 = DoubleVar(0)
341 CHA_A2 = DoubleVar(0)
343 CHB_A1 = DoubleVar(0)
345 CHB_A2 = DoubleVar(0)
347 Auto_ETS_Comp = IntVar(0)
348 ETS_TC1 = DoubleVar(0)
350 ETS_A1 = DoubleVar(0)
352 ETS_TC2 = DoubleVar(0)
354 ETS_A2 = DoubleVar(0)
360 windowingsystem = root.tk.call(
'tk',
'windowingsystem')
361 ScreenWidth = root.winfo_screenwidth()
362 ScreenHeight = root.winfo_screenheight()
364 if (root.tk.call(
'tk',
'windowingsystem')==
'aqua'):
365 Style_String =
'aqua'
367 root.createcommand(
'::tk::mac::ReopenApplication', root.deiconify)
368 root.createcommand(
'::tk::mac::Quit', root.destroy)
370 root.option_add(
'*tearOff',
False)
371 if sys.version_info[0] == 2:
372 menubar = tKinter.Menu(root)
373 appmenu = tKinter.Menu(menubar, name=
'apple')
375 menubar = tkinter.Menu(root)
376 appmenu = tkinter.Menu(menubar, name=
'apple')
379 menubar.add_cascade(menu=appmenu)
381 root[
'menu'] = menubar
389 path = pathlib.Path(alice.__file__).parent.absolute()
390 filename = os.path.join(path,
"resources", InitFileName)
391 InitFile = open(filename)
392 for line
in InitFile:
394 exec( line.rstrip(), globals(), globals())
397 print(
"Skiping " + line.rstrip())
401 InitFile = open(InitFileName)
402 for line
in InitFile:
404 exec( line.rstrip(), globals(), globals())
407 print(
"Skiping " + line.rstrip())
410 print(
"No Init File Read. " + InitFileName +
" Not Found")
412 XOLXY = X0L = FontSize * 7
413 XOLF = XOLBP = XOLIA = int(FontSize * 4.625)
414 XOLNqP = XOLNiC = int(FontSize * 3.125)
417 root.style.theme_use(Style_String)
419 root.style.theme_use(
'default')
421 root.tk_focusFollowsMouse()
425 if sys.version_info[0] == 2:
426 default_font = tkFont.nametofont(
"TkDefaultFont")
427 if sys.version_info[0] == 3:
428 default_font = tkinter.font.nametofont(
"TkDefaultFont")
429 default_font.configure(size=FontSize)
431 CHvpdiv = (0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0)
433 CHipdiv = (0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
435 SAMagdiv = (
"10nV",
"100nV",
"1uV",
"10uV",
"100uV",
"1mV",
"10mV",
"0.1",
"1.0",
"10.0")
437 TMpdiv = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
438 ResScalediv = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000)
439 SampRateList = (1024, 2048, 4096, 8192, 16384, 32765, 64000, 93023, 93385, 93750, 94118,
440 96385, 96774, 97166, 97561, 97959, 98361, 98765, 99174, 99585, 100000)
441 NoiseList =[
"None",
"Uniform",
"Gaussian"]
443 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
447 AWGAOffsetvalue = 0.0
451 AWGADutyCyclevalue = 50
454 AWGBOffsetvalue = 0.0
458 AWGBDutyCyclevalue = 50
468 MeasGateStatus = IntVar(0)
469 MeasGateStatus.set(0)
471 DCV1 = DCV2 = MinV1 = MaxV1 = MinV2 = MaxV2 = MidV1 = PPV1 = MidV2 = PPV2 = SV1 = SI1 = 0
473 DCVMuxA = MinVMuxA = MaxVMuxA = MidVMuxA = PPVMuxA = SVMuxA = 0
474 DCVMuxB = MinVMuxB = MaxVMuxB = MidVMuxB = PPVMuxB = SVMuxB = 0
475 DCVMuxC = MinVMuxC = MaxVMuxC = MidVMuxC = PPVMuxC = SVMuxC = 0
476 DCVMuxD = MinVMuxD = MaxVMuxD = MidVMuxD = PPVMuxD = SVMuxD = 0
477 PeakVA = PeakVB = PeakIA = PeakIB = 0.0
478 PeakVMA = PeakVMB = PeakVMC = PeakVMD = 0.0
479 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
480 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = 0.0
481 PeakphaseVA = PeakphaseVB = PeakphaseIA = PeakphaseIB = PeakphaseVAB = 0.0
483 DCI1 = DCI2 = MinI1 = MaxI1 = MinI2 = MaxI2 = MidI1 = PPI1 = MidI2 = PPI2 = SV2 = SI2 = 0
484 CHAperiod = CHAfreq = CHBperiod = CHBfreq = 0
486 CHAVGain = CHBVGain = 1.0
487 CHAVOffset = CHBVOffset = 0.0
489 CHAOffset = CHBOffset = CHBAOffset = CHBBOffset = CHBCOffset = CHBDOffset = 2.5
490 CHAIOffset = CHBIOffset = InOffA = InGainA = InOffB = InGainB = 0.0
492 CANVASwidth = GRW + 2 * X0L
493 CANVASheight = GRH + Y0T + (FontSize * 7)
526 DigFiltABoxCar = IntVar(0)
527 DigFiltBBoxCar = IntVar(0)
528 DigDeSkewA = IntVar(0)
529 DigDeSkewB = IntVar(0)
538 AWGFiltABoxCar = IntVar(0)
539 AWGFiltBBoxCar = IntVar(0)
544 SampleRateStatus = IntVar(0)
545 ETSStatus = IntVar(0)
553 VmemoryA = numpy.ones(1)
554 VmemoryB = numpy.ones(1)
555 ImemoryA = numpy.ones(1)
556 ImemoryB = numpy.ones(1)
557 TRACEresetTime =
True
558 TRACEresetFreq =
True
559 AWGScreenStatus = IntVar(0)
609 ScreenTrefresh = IntVar(0)
610 ScreenXYrefresh = IntVar(0)
618 CurrentFreqX = X0LBP + 14
619 FBins = numpy.linspace(0, 50000, num=16384)
620 FStep = numpy.linspace(0, 16384, num=NSteps.get())
621 FSweepMode = IntVar(0)
622 FSweepCont = IntVar(0)
623 FStepSync = IntVar(0)
624 FSweepSync = IntVar(0)
625 ShowCA_VdB = IntVar(0)
627 ShowCB_VdB = IntVar(0)
629 ShowMarkerBP = IntVar(0)
630 ShowCA_RdB = IntVar(0)
631 ShowCA_RP = IntVar(0)
632 ShowCB_RdB = IntVar(0)
633 ShowCB_RP = IntVar(0)
634 ShowMathBP = IntVar(0)
635 ShowRMathBP = IntVar(0)
636 SingleShotSA = IntVar(0)
650 NetworkScreenStatus = IntVar(0)
651 BDSweepFile = IntVar(0)
655 MarkerNum = MarkerFreqNum = 0
658 TCursor = VCursor = 0
661 XCursor = YCursor = 0
663 ShowdBCur = IntVar(0)
664 FCursor = dBCursor = 0
665 ShowBPCur = IntVar(0)
666 ShowBdBCur = IntVar(0)
667 BPCursor = BdBCursor = 0
668 RUNstatus = IntVar(0)
673 DBdivlist = [1, 2, 3, 5, 10, 15, 20]
674 DBdivindex = IntVar(0)
678 DBdivindexBP = IntVar(0)
680 DBlevelBP = IntVar(0)
683 SpectrumScreenStatus = IntVar(0)
684 SmoothCurvesSA = IntVar(0)
685 SmoothCurvesBP = IntVar(0)
687 IAScreenStatus = IntVar(0)
688 NqPScreenStatus = IntVar(0)
690 NiCScreenStatus = IntVar(0)
692 ImpedanceMagnitude = 0.0
694 ImpedanceRseries = 0.0
695 ImpedanceXseries = 0.0
696 Show_Rseries = IntVar(0)
697 Show_Xseries = IntVar(0)
698 Show_Magnitude = IntVar(0)
699 Show_Angle = IntVar(0)
700 Show_RseriesRef = IntVar(0)
701 Show_XseriesRef = IntVar(0)
702 Show_MagnitudeRef = IntVar(0)
703 Show_AngleRef = IntVar(0)
716 IAGridType = IntVar(0)
718 DisplaySeries = IntVar(0)
719 IA_Ext_Conf = IntVar(0)
720 IASweepSaved = IntVar(0)
728 OhmStatus = IntVar(0)
729 OhmRunStatus = IntVar(0)
739 FFTmemoryA = numpy.ones(1)
740 PhaseMemoryA = numpy.ones(1)
741 FFTmemoryB = numpy.ones(1)
742 PhaseMemoryB = numpy.ones(1)
743 SMPfftpwrTwo = IntVar(0)
745 SMPfft = 2 ** SMPfftpwrTwo.get()
747 FFTwindowshape = numpy.ones(SMPfft)
759 FreqTraceMode = IntVar(0)
776 MathScreenStatus = IntVar(0)
778 XYScreenStatus = IntVar(0)
781 YsignalVA = IntVar(0)
782 YsignalVB = IntVar(0)
783 YsignalIA = IntVar(0)
784 YsignalIB = IntVar(0)
786 YsignalMX = IntVar(0)
787 YsignalMY = IntVar(0)
831 SDATAPort = IntVar(0)
832 SLATCHPort = IntVar(0)
836 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
837 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
838 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
839 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
840 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
841 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
842 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
843 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
844 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
845 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
846 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
847 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
848 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
849 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
850 sKDBgw8AKFzIsKFChA4jMoQoUSJFAAgHLryYUeDGgx8zhiw4EuRDkxg7ltR4UmRLki9RclQZk2VK
851 lzdh5pTJE+dMnz1/6uyYsKZHowRXHt1pcGREohUbQo2qNKlDolgFBgQAOw==
853 hipulseimg = PhotoImage(data=hipulse)
856 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
857 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
858 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
859 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
860 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
861 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
862 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
863 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
864 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
865 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
866 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
867 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
868 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
869 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
870 sKBBggASKgRwEOHChwsbDoRIkaHEBxQdWpSosGHHix8NhvSYkORGkyhBljw4kuVKkS9TwjzpkubE
871 mDVl6tR4ESPOmzYLtgTac6hAozxzqgzqkynRmhUhmoz6cCpVpD0vBgQAOw==
873 lowpulseimg = PhotoImage(data=lowpulse)
903 self.
widget.after_cancel(id)
907 x, y, cx, cy = self.
widget.bbox(
"insert")
908 x += self.
widget.winfo_rootx() + 25
909 y += self.
widget.winfo_rooty() + 20
913 self.
tw.wm_overrideredirect(
True)
914 self.
tw.wm_geometry(
"+%d+%d" % (x, y))
915 label = Label(self.
tw, text=self.
text, justify=
'left',
916 background=
"#ffffe0", foreground=
"#000000",
917 relief=
'solid', borderwidth=1,
934 global TgInput, TgEdge, ManualTrigger, SingleShot, AutoLevel, SingleShotSA
935 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
936 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
937 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
938 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
939 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
940 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
941 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
942 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
943 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
944 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
945 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
946 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
947 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
948 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
949 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
950 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
951 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase
952 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
953 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
954 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
955 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, DacScreenStatus, DigScreenStatus
956 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
957 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
958 global TimeDisp, XYDisp, FreqDisp, IADisp, XYScreenStatus, IAScreenStatus, SpectrumScreenStatus
959 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry, AWGAPhaseDelay, AWGBPhaseDelay
960 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasDelay
961 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb, ChopMuxMode, ChopTrig, DualMuxMode
962 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
963 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, HozPossentry
964 global SmoothCurvesBP, bodewindow, AWG_Amp_Mode, ColorMode
965 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp
966 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP
967 global BPSweepMode, BPSweepCont, BodeScreenStatus, RevDate, SweepStepBodeEntry
968 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
969 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
970 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
971 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
972 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
973 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
974 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
975 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
976 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
977 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
978 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter, NetworkScreenStatus
979 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
980 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
981 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
982 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAcsvFile, AWGBcsvFile
983 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGAwavFile, AWGBwavFile
984 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
985 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
986 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
987 global DigFiltStatus, DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
988 global phawindow, PhAca, PhAScreenStatus, PhADisp
989 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, BoardStatus, boardwindow, BrdSel
990 global VScale, IScale, RefphEntry, EnableScopeOnly, Roll_Mode
991 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
992 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
993 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
994 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
995 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
999 ConfgFile = open(filename,
"w")
1003 ConfgFile.write(
"root.geometry('+" + str(root.winfo_x()) +
'+' + str(root.winfo_y()) +
"')\n")
1004 if EnableScopeOnly == 0:
1005 ConfgFile.write(
"awgwindow.geometry('+" + str(awgwindow.winfo_x()) +
'+' + str(awgwindow.winfo_y()) +
"')\n")
1006 ConfgFile.write(
'GRW = ' + str(GRW) +
'\n')
1007 ConfgFile.write(
'GRH = ' + str(GRH) +
'\n')
1008 ConfgFile.write(
'ColorMode.set(' + str(ColorMode.get()) +
')\n')
1010 ConfgFile.write(
'MathString = "' + MathString +
'"\n')
1011 ConfgFile.write(
'MathUnits = "' + MathUnits +
'"\n')
1012 ConfgFile.write(
'MathAxis = "' + MathAxis +
'"\n')
1013 ConfgFile.write(
'MathXString = "' + MathXString +
'"\n')
1014 ConfgFile.write(
'MathXUnits = "' + MathXUnits +
'"\n')
1015 ConfgFile.write(
'MathXAxis = "' + MathXAxis +
'"\n')
1016 ConfgFile.write(
'MathYString = "' + MathYString +
'"\n')
1017 ConfgFile.write(
'MathYUnits = "' + MathYUnits +
'"\n')
1018 ConfgFile.write(
'MathYAxis = "' + MathYAxis +
'"\n')
1019 if BoardStatus.get() > 0:
1020 ConfgFile.write(
'MakeBoardScreen()\n')
1021 ConfgFile.write(
"boardwindow.geometry('+" + str(boardwindow.winfo_x()) +
'+' + str(boardwindow.winfo_y()) +
"')\n")
1022 ConfgFile.write(
'BrdSel.set(' + str(BrdSel.get()) +
')\n')
1023 ConfgFile.write(
'SelectBoard()\n')
1025 ConfgFile.write(
'DestroyBoardScreen()\n')
1026 if MathScreenStatus.get() > 0:
1027 ConfgFile.write(
'NewEnterMathControls()\n')
1028 ConfgFile.write(
"MathWindow.geometry('+" + str(MathWindow.winfo_x()) +
'+' + str(MathWindow.winfo_y()) +
"')\n")
1030 ConfgFile.write(
'DestroyMathScreen()\n')
1031 if XYScreenStatus.get() > 0:
1032 ConfgFile.write(
'GRWXY = ' + str(GRWXY) +
'\n')
1033 ConfgFile.write(
'GRHXY = ' + str(GRHXY) +
'\n')
1034 ConfgFile.write(
'MakeXYWindow()\n')
1035 ConfgFile.write(
"xywindow.geometry('+" + str(xywindow.winfo_x()) +
'+' + str(xywindow.winfo_y()) +
"')\n")
1036 ConfgFile.write(
'CHAsbxy.delete(0,END)\n')
1037 ConfgFile.write(
'CHAsbxy.insert(0, ' + CHAsbxy.get() +
')\n')
1038 ConfgFile.write(
'CHAIsbxy.delete(0,END)\n')
1039 ConfgFile.write(
'CHAIsbxy.insert(0, ' + CHAIsbxy.get() +
')\n')
1040 ConfgFile.write(
'CHAVPosEntryxy.delete(0,END)\n')
1041 ConfgFile.write(
'CHAVPosEntryxy.insert(4, ' + CHAVPosEntryxy.get() +
')\n')
1042 ConfgFile.write(
'CHAIPosEntryxy.delete(0,END)\n')
1043 ConfgFile.write(
'CHAIPosEntryxy.insert(4, ' + CHAIPosEntryxy.get() +
')\n')
1044 ConfgFile.write(
'CHBsbxy.delete(0,END)\n')
1045 ConfgFile.write(
'CHBsbxy.insert(0, ' + CHBsbxy.get() +
')\n')
1046 ConfgFile.write(
'CHBIsbxy.delete(0,END)\n')
1047 ConfgFile.write(
'CHBIsbxy.insert(0, ' + CHBIsbxy.get() +
')\n')
1048 ConfgFile.write(
'CHBVPosEntryxy.delete(0,END)\n')
1049 ConfgFile.write(
'CHBVPosEntryxy.insert(4, ' + CHBVPosEntryxy.get() +
')\n')
1050 ConfgFile.write(
'CHBIPosEntryxy.delete(0,END)\n')
1051 ConfgFile.write(
'CHBIPosEntryxy.insert(4, ' + CHBIPosEntryxy.get() +
')\n')
1053 ConfgFile.write(
'DestroyXYScreen()\n')
1054 if IAScreenStatus.get() > 0:
1055 ConfgFile.write(
'GRWIA = ' + str(GRWIA) +
'\n')
1056 ConfgFile.write(
'GRHIA = ' + str(GRHIA) +
'\n')
1057 ConfgFile.write(
'MakeIAWindow()\n')
1058 ConfgFile.write(
"iawindow.geometry('+" + str(iawindow.winfo_x()) +
'+' + str(iawindow.winfo_y()) +
"')\n")
1059 ConfgFile.write(
'IASource.set(' + str(IASource.get()) +
')\n')
1060 ConfgFile.write(
'DisplaySeries.set(' + str(DisplaySeries.get()) +
')\n')
1061 ConfgFile.write(
'RsystemEntry.delete(0,END)\n')
1062 ConfgFile.write(
'RsystemEntry.insert(5, ' + RsystemEntry.get() +
')\n')
1063 ConfgFile.write(
'ResScale.delete(0,END)\n')
1064 ConfgFile.write(
'ResScale.insert(5, ' + ResScale.get() +
')\n')
1065 ConfgFile.write(
'GainCorEntry.delete(0,END)\n')
1066 ConfgFile.write(
'GainCorEntry.insert(5, ' + GainCorEntry.get() +
')\n')
1067 ConfgFile.write(
'PhaseCorEntry.delete(0,END)\n')
1068 ConfgFile.write(
'PhaseCorEntry.insert(5, ' + PhaseCorEntry.get() +
')\n')
1069 ConfgFile.write(
'NetworkScreenStatus.set(' + str(NetworkScreenStatus.get()) +
')\n')
1071 ConfgFile.write(
'DestroyIAScreen()\n')
1072 if SpectrumScreenStatus.get() > 0:
1073 ConfgFile.write(
'GRWF = ' + str(GRWF) +
'\n')
1074 ConfgFile.write(
'GRHF = ' + str(GRHF) +
'\n')
1075 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1076 ConfgFile.write(
'MakeSpectrumWindow()\n')
1077 ConfgFile.write(
"freqwindow.geometry('+" + str(freqwindow.winfo_x()) +
'+' + str(freqwindow.winfo_y()) +
"')\n")
1078 ConfgFile.write(
'ShowC1_VdB.set(' + str(ShowC1_VdB.get()) +
')\n')
1079 ConfgFile.write(
'ShowC1_P.set(' + str(ShowC1_P.get()) +
')\n')
1080 ConfgFile.write(
'ShowC2_VdB.set(' + str(ShowC2_VdB.get()) +
')\n')
1081 ConfgFile.write(
'ShowC2_P.set(' + str(ShowC2_P.get()) +
')\n')
1082 ConfgFile.write(
'StartFreqEntry.delete(0,END)\n')
1083 ConfgFile.write(
'StartFreqEntry.insert(5, ' + StartFreqEntry.get() +
')\n')
1084 ConfgFile.write(
'StopFreqEntry.delete(0,END)\n')
1085 ConfgFile.write(
'StopFreqEntry.insert(5, ' + StopFreqEntry.get() +
')\n')
1086 ConfgFile.write(
'HScale.set(' + str(HScale.get()) +
')\n')
1087 ConfgFile.write(
'FreqTraceMode.set(' + str(FreqTraceMode.get()) +
')\n')
1088 ConfgFile.write(
'SingleShotSA.set(' + str(SingleShotSA.get()) +
')\n')
1090 ConfgFile.write(
'DestroySpectrumScreen()\n')
1092 if DacScreenStatus.get() > 0:
1093 ConfgFile.write(
'MakeDacScreen()\n')
1094 ConfgFile.write(
"win1.geometry('+" + str(win1.winfo_x()) +
'+' + str(win1.winfo_y()) +
"')\n")
1096 ConfgFile.write(
'DestroyDacScreen()\n')
1097 if DigScreenStatus.get() > 0:
1098 ConfgFile.write(
'MakeDigScreen()\n')
1099 ConfgFile.write(
"win2.geometry('+" + str(win2.winfo_x()) +
'+' + str(win2.winfo_y()) +
"')\n")
1101 ConfgFile.write(
'DestroyDigScreen()\n')
1102 if EnableHSsampling > 0:
1103 ConfgFile.write(
'FminEntry.delete(0,"end")\n')
1104 ConfgFile.write(
'FminEntry.insert(0, ' + FminEntry.get() +
')\n')
1105 ConfgFile.write(
'HtMulEntry.delete(0,"end")\n')
1106 ConfgFile.write(
'HtMulEntry.insert(0, ' + HtMulEntry.get() +
')\n')
1107 ConfgFile.write(
'Auto_ETS_Comp.set(' + str(Auto_ETS_Comp.get()) +
')\n')
1109 ConfgFile.write(
'ets_TC1Entry.delete(0,"end")\n')
1110 ConfgFile.write(
'ets_TC1Entry.insert(0, ' + ets_TC1Entry.get() +
')\n')
1111 ConfgFile.write(
'ETS_TC1.set(' + ets_TC1Entry.get() +
')\n')
1112 ConfgFile.write(
'ets_A1Entry.delete(0,"end")\n')
1113 ConfgFile.write(
'ets_A1Entry.insert(0, ' + ets_A1Entry.get() +
')\n')
1114 ConfgFile.write(
'ETS_A1.set(' + ets_A1Entry.get() +
')\n')
1115 ConfgFile.write(
'ets_TC2Entry.delete(0,"end")\n')
1116 ConfgFile.write(
'ets_TC2Entry.insert(0, ' + ets_TC2Entry.get() +
')\n')
1117 ConfgFile.write(
'ETS_TC2.set(' + ets_TC2Entry.get() +
')\n')
1118 ConfgFile.write(
'ets_A2Entry.delete(0,"end")\n')
1119 ConfgFile.write(
'ets_A2Entry.insert(0, ' + ets_A2Entry.get() +
')\n')
1120 ConfgFile.write(
'ETS_A2.set(' + ets_A2Entry.get() +
')\n')
1122 ConfgFile.write(
'ETS_TC1.set(' + str(ETS_TC1.get()) +
')\n')
1123 ConfgFile.write(
'ETS_A1.set(' + str(ETS_A1.get()) +
')\n')
1124 ConfgFile.write(
'ETS_TC2.set(' + str(ETS_TC2.get()) +
')\n')
1125 ConfgFile.write(
'ETS_A2.set(' + str(ETS_A2.get()) +
')\n')
1126 if DigFiltStatus.get() == 1:
1127 ConfgFile.write(
'MakeDigFiltWindow()\n')
1128 ConfgFile.write(
"digfltwindow.geometry('+" + str(digfltwindow.winfo_x()) +
'+' + str(digfltwindow.winfo_y()) +
"')\n")
1129 ConfgFile.write(
'DigFiltABoxCar.set(' + str(DigFiltABoxCar.get()) +
')\n')
1130 ConfgFile.write(
'DigFiltBBoxCar.set(' + str(DigFiltBBoxCar.get()) +
')\n')
1131 ConfgFile.write(
'BCALenEntry.delete(0,"end")\n')
1132 ConfgFile.write(
'BCALenEntry.insert(0, ' + BCALenEntry.get() +
')\n')
1133 ConfgFile.write(
'BCBLenEntry.delete(0,"end")\n')
1134 ConfgFile.write(
'BCBLenEntry.insert(0, ' + BCBLenEntry.get() +
')\n')
1135 ConfgFile.write(
'AWGALenEntry.delete(0,"end")\n')
1136 ConfgFile.write(
'AWGALenEntry.insert(0, ' + AWGALenEntry.get() +
')\n')
1137 ConfgFile.write(
'AWGFiltABoxCar.set(' + str(AWGFiltABoxCar.get()) +
')\n')
1138 ConfgFile.write(
'AWGBLenEntry.delete(0,"end")\n')
1139 ConfgFile.write(
'AWGBLenEntry.insert(0, ' + AWGBLenEntry.get() +
')\n')
1140 ConfgFile.write(
'AWGFiltBBoxCar.set(' + str(AWGFiltBBoxCar.get()) +
')\n')
1141 ConfgFile.write(
'BuildBoxCarA()\n')
1142 ConfgFile.write(
'BuildBoxCarB()\n')
1143 ConfgFile.write(
'BuildAWGBoxCarA()\n')
1144 ConfgFile.write(
'BuildAWGBoxCarB()\n')
1146 ConfgFile.write(
'DestroyDigFiltScreen()\n')
1147 if MinigenScreenStatus.get() == 1:
1148 ConfgFile.write(
'MakeMinigenWindow()\n')
1149 ConfgFile.write(
"minigenwindow.geometry('+" + str(minigenwindow.winfo_x()) +
'+' + str(minigenwindow.winfo_y()) +
"')\n")
1150 ConfgFile.write(
'MinigenMode.set(' + str(MinigenMode.get()) +
')\n')
1151 ConfgFile.write(
'MinigenFout.delete(0,END)\n')
1152 ConfgFile.write(
'MinigenFout.insert(4, ' + MinigenFout.get() +
')\n')
1153 ConfgFile.write(
'MinigenFclk.delete(0,END)\n')
1154 ConfgFile.write(
'MinigenFclk.insert(4, ' + MinigenFclk.get() +
')\n')
1155 ConfgFile.write(
'SCLKPort.set(' + str(SCLKPort.get()) +
')\n')
1156 ConfgFile.write(
'SDATAPort.set(' + str(SDATAPort.get()) +
')\n')
1157 ConfgFile.write(
'SLATCHPort.set(' + str(SLATCHPort.get()) +
')\n')
1159 ConfgFile.write(
'DestroyMinigenScreen()\n')
1160 if MuxScreenStatus.get() == 1:
1161 ConfgFile.write(
'MakeMuxModeWindow()\n')
1162 ConfgFile.write(
"muxwindow.geometry('+" + str(muxwindow.winfo_x()) +
'+' + str(muxwindow.winfo_y()) +
"')\n")
1163 ConfgFile.write(
'Show_CBA.set(' + str(Show_CBA.get()) +
')\n')
1164 ConfgFile.write(
'Show_CBB.set(' + str(Show_CBB.get()) +
')\n')
1165 ConfgFile.write(
'Show_CBC.set(' + str(Show_CBC.get()) +
')\n')
1166 ConfgFile.write(
'Show_CBD.set(' + str(Show_CBD.get()) +
')\n')
1167 ConfgFile.write(
'MuxEnb.set(' + str(MuxEnb.get()) +
')\n')
1168 ConfgFile.write(
'DualMuxMode.set(' + str(DualMuxMode.get()) +
')\n')
1169 ConfgFile.write(
'ChopMuxMode.set(' + str(ChopMuxMode.get()) +
')\n')
1170 ConfgFile.write(
'ChopTrig.set(' + str(ChopTrig.get()) +
')\n')
1171 ConfgFile.write(
'CHB_Asb.delete(0,END)\n')
1172 ConfgFile.write(
'CHB_Asb.insert(0, ' + CHB_Asb.get() +
')\n')
1173 ConfgFile.write(
'CHB_Bsb.delete(0,END)\n')
1174 ConfgFile.write(
'CHB_Bsb.insert(0, ' + CHB_Bsb.get() +
')\n')
1175 ConfgFile.write(
'CHB_Csb.delete(0,END)\n')
1176 ConfgFile.write(
'CHB_Csb.insert(0, ' + CHB_Csb.get() +
')\n')
1177 ConfgFile.write(
'CHB_Dsb.delete(0,END)\n')
1178 ConfgFile.write(
'CHB_Dsb.insert(0, ' + CHB_Dsb.get() +
')\n')
1179 ConfgFile.write(
'CHB_APosEntry.delete(0,END)\n')
1180 ConfgFile.write(
'CHB_APosEntry.insert(4, ' + CHB_APosEntry.get() +
')\n')
1181 ConfgFile.write(
'CHB_BPosEntry.delete(0,END)\n')
1182 ConfgFile.write(
'CHB_BPosEntry.insert(4, ' + CHB_BPosEntry.get() +
')\n')
1183 ConfgFile.write(
'CHB_CPosEntry.delete(0,END)\n')
1184 ConfgFile.write(
'CHB_CPosEntry.insert(4, ' + CHB_CPosEntry.get() +
')\n')
1185 ConfgFile.write(
'CHB_DPosEntry.delete(0,END)\n')
1186 ConfgFile.write(
'CHB_DPosEntry.insert(4, ' + CHB_DPosEntry.get() +
')\n')
1188 ConfgFile.write(
'DestroyMuxScreen()\n')
1190 if PhAScreenStatus.get() > 0:
1191 ConfgFile.write(
'GRWPhA = ' + str(GRWPhA) +
'\n')
1192 ConfgFile.write(
'GRHPhA = ' + str(GRHPhA) +
'\n')
1193 ConfgFile.write(
'MakePhAWindow()\n')
1194 ConfgFile.write(
"phawindow.geometry('+" + str(phawindow.winfo_x()) +
'+' + str(phawindow.winfo_y()) +
"')\n")
1195 ConfgFile.write(
'VScale.delete(0,END)\n')
1196 ConfgFile.write(
'VScale.insert(0, ' + str(VScale.get()) +
')\n')
1197 ConfgFile.write(
'IScale.delete(0,END)\n')
1198 ConfgFile.write(
'IScale.insert(0, ' + str(IScale.get()) +
')\n')
1199 ConfgFile.write(
'RefphEntry.delete(0,END)\n')
1200 ConfgFile.write(
'RefphEntry.insert(0, "' + str(RefphEntry.get()) +
'")\n')
1201 if vat_btn.config(
'text')[-1] ==
'OFF':
1202 ConfgFile.write(
'vat_btn.config(text="OFF", style="Stop.TButton")\n')
1204 ConfgFile.write(
'vat_btn.config(text="ON", style="Run.TButton")\n')
1205 if MuxScreenStatus.get() == 0:
1206 if vbt_btn.config(
'text')[-1] ==
'OFF':
1207 ConfgFile.write(
'vbt_btn.config(text="OFF", style="Stop.TButton")\n')
1209 ConfgFile.write(
'vbt_btn.config(text="ON", style="Run.TButton")\n')
1210 if vabt_btn.config(
'text')[-1] ==
'OFF':
1211 ConfgFile.write(
'vabt_btn.config(text="OFF", style="Stop.TButton")\n')
1213 ConfgFile.write(
'vabt_btn.config(text="ON", style="Run.TButton")\n')
1215 ConfgFile.write(
'ShowPB_A.set(' + str(ShowPB_A.get()) +
')\n')
1216 ConfgFile.write(
'ShowPB_B.set(' + str(ShowPB_B.get()) +
')\n')
1217 ConfgFile.write(
'ShowPB_C.set(' + str(ShowPB_C.get()) +
')\n')
1218 ConfgFile.write(
'ShowPB_D.set(' + str(ShowPB_D.get()) +
')\n')
1219 if iat_btn.config(
'text')[-1] ==
'OFF':
1220 ConfgFile.write(
'iat_btn.config(text="OFF", style="Stop.TButton")\n')
1222 ConfgFile.write(
'iat_btn.config(text="ON", style="Run.TButton")\n')
1223 if ibt_btn.config(
'text')[-1] ==
'OFF':
1224 ConfgFile.write(
'ibt_btn.config(text="OFF", style="Stop.TButton")\n')
1226 ConfgFile.write(
'ibt_btn.config(text="ON", style="Run.TButton")\n')
1229 ConfgFile.write(
'DestroyPhAScreen()\n')
1230 if BodeScreenStatus.get() == 1:
1231 ConfgFile.write(
'GRWBP = ' + str(GRWBP) +
'\n')
1232 ConfgFile.write(
'GRHBP = ' + str(GRHBP) +
'\n')
1233 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1234 ConfgFile.write(
'ImpedanceCenter.set(' + str(ImpedanceCenter.get()) +
')\n')
1235 ConfgFile.write(
'MakeBodeWindow()\n')
1236 ConfgFile.write(
"bodewindow.geometry('+" + str(bodewindow.winfo_x()) +
'+' + str(bodewindow.winfo_y()) +
"')\n")
1237 ConfgFile.write(
'ShowCA_VdB.set(' + str(ShowCA_VdB.get()) +
')\n')
1238 ConfgFile.write(
'ShowCB_VdB.set(' + str(ShowCB_VdB.get()) +
')\n')
1239 ConfgFile.write(
'ShowCA_P.set(' + str(ShowCA_P.get()) +
')\n')
1240 ConfgFile.write(
'ShowCB_P.set(' + str(ShowCB_P.get()) +
')\n')
1241 ConfgFile.write(
'ShowCA_RdB.set(' + str(ShowCA_RdB.get()) +
')\n')
1242 ConfgFile.write(
'ShowCA_RP.set(' + str(ShowCA_RP.get()) +
')\n')
1243 ConfgFile.write(
'ShowCB_RdB.set(' + str(ShowCB_RdB.get()) +
')\n')
1244 ConfgFile.write(
'ShowCB_RP.set(' + str(ShowCB_RP.get()) +
')\n')
1245 ConfgFile.write(
'BodeDisp.set(' + str(BodeDisp.get()) +
')\n')
1246 ConfgFile.write(
'ShowMarkerBP.set(' + str(ShowMarkerBP.get()) +
')\n')
1247 ConfgFile.write(
'ShowMathBP.set(' + str(ShowMathBP.get()) +
')\n')
1248 ConfgFile.write(
'ShowRMathBP.set(' + str(ShowRMathBP.get()) +
')\n')
1249 ConfgFile.write(
'HScaleBP.set(' + str(HScaleBP.get()) +
')\n')
1250 ConfgFile.write(
'NSteps.set(' + str(NSteps.get()) +
')\n')
1251 ConfgFile.write(
'DBdivindexBP.set(' + str(DBdivindexBP.get()) +
')\n')
1252 ConfgFile.write(
'DBlevelBP.set(' + str(DBlevelBP.get()) +
')\n')
1253 ConfgFile.write(
'FSweepMode.set(' + str(FSweepMode.get()) +
')\n')
1254 ConfgFile.write(
'SweepStepBodeEntry.delete(0,END)\n')
1255 ConfgFile.write(
'SweepStepBodeEntry.insert(4, ' + SweepStepBodeEntry.get() +
')\n')
1256 ConfgFile.write(
'StopBodeEntry.delete(0,END)\n')
1257 ConfgFile.write(
'StopBodeEntry.insert(4, ' + StopBodeEntry.get() +
')\n')
1258 ConfgFile.write(
'StartBodeEntry.delete(0,END)\n')
1259 ConfgFile.write(
'StartBodeEntry.insert(4, ' + StartBodeEntry.get() +
')\n')
1260 ConfgFile.write(
'Show_Rseries.set(' + str(Show_Rseries.get()) +
')\n')
1261 ConfgFile.write(
'Show_Xseries.set(' + str(Show_Xseries.get()) +
')\n')
1262 ConfgFile.write(
'Show_Magnitude.set(' + str(Show_Magnitude.get()) +
')\n')
1263 ConfgFile.write(
'Show_Angle.set(' + str(Show_Angle.get()) +
')\n')
1265 ConfgFile.write(
'DestroyBodeScreen()\n')
1266 if MeasureStatus.get() == 1:
1268 ConfgFile.write(
'ChaLableSrring1 = "' + ChaLableSrring1 +
'"\n')
1269 ConfgFile.write(
'ChaLableSrring2 = "' + ChaLableSrring2 +
'"\n')
1270 ConfgFile.write(
'ChaLableSrring3 = "' + ChaLableSrring3 +
'"\n')
1271 ConfgFile.write(
'ChaLableSrring4 = "' + ChaLableSrring4 +
'"\n')
1272 ConfgFile.write(
'ChaLableSrring5 = "' + ChaLableSrring5 +
'"\n')
1273 ConfgFile.write(
'ChaLableSrring6 = "' + ChaLableSrring6 +
'"\n')
1274 ConfgFile.write(
'ChbLableSrring1 = "' + ChbLableSrring1 +
'"\n')
1275 ConfgFile.write(
'ChbLableSrring2 = "' + ChbLableSrring2 +
'"\n')
1276 ConfgFile.write(
'ChbLableSrring3 = "' + ChbLableSrring3 +
'"\n')
1277 ConfgFile.write(
'ChbLableSrring4 = "' + ChbLableSrring4 +
'"\n')
1278 ConfgFile.write(
'ChbLableSrring5 = "' + ChbLableSrring5 +
'"\n')
1279 ConfgFile.write(
'ChbLableSrring6 = "' + ChbLableSrring6 +
'"\n')
1280 ConfgFile.write(
'ChaMeasString1 = "' + ChaMeasString1 +
'"\n')
1281 ConfgFile.write(
'ChaMeasString2 = "' + ChaMeasString2 +
'"\n')
1282 ConfgFile.write(
'ChaMeasString3 = "' + ChaMeasString3 +
'"\n')
1283 ConfgFile.write(
'ChaMeasString4 = "' + ChaMeasString4 +
'"\n')
1284 ConfgFile.write(
'ChaMeasString5 = "' + ChaMeasString5 +
'"\n')
1285 ConfgFile.write(
'ChaMeasString6 = "' + ChaMeasString6 +
'"\n')
1286 ConfgFile.write(
'ChbMeasString1 = "' + ChbMeasString1 +
'"\n')
1287 ConfgFile.write(
'ChbMeasString2 = "' + ChbMeasString2 +
'"\n')
1288 ConfgFile.write(
'ChbMeasString3 = "' + ChbMeasString3 +
'"\n')
1289 ConfgFile.write(
'ChbMeasString4 = "' + ChbMeasString4 +
'"\n')
1290 ConfgFile.write(
'ChbMeasString5 = "' + ChbMeasString5 +
'"\n')
1291 ConfgFile.write(
'ChbMeasString6 = "' + ChbMeasString6 +
'"\n')
1292 ConfgFile.write(
'MakeMeasureScreen()\n')
1293 ConfgFile.write(
"measurewindow.geometry('+" + str(measurewindow.winfo_x()) +
'+' + str(measurewindow.winfo_y()) +
"')\n")
1295 ConfgFile.write(
'DestroyMeasuewScreen()\n')
1296 if ETSStatus.get() == 1:
1297 ConfgFile.write(
'MakeETSWindow()\n')
1298 ConfgFile.write(
"etswindow.geometry('+" + str(etswindow.winfo_x()) +
'+' + str(etswindow.winfo_y()) +
"')\n")
1299 ConfgFile.write(
'ETSDisp.set(' + str(ETSDisp.get()) +
')\n')
1300 ConfgFile.write(
'ETSDir.set(' + str(ETSDir.get()) +
')\n')
1301 ConfgFile.write(
'FMulXEntry.delete(0,END)\n')
1302 ConfgFile.write(
'FMulXEntry.insert(6, ' + FMulXEntry.get() +
')\n')
1303 ConfgFile.write(
'DivXEntry.delete(0,END)\n')
1304 ConfgFile.write(
'DivXEntry.insert(4, ' + DivXEntry.get() +
')\n')
1305 ConfgFile.write(
'ETSts.delete(0,END)\n')
1306 ConfgFile.write(
'ETSts.insert(4, ' + ETSts.get() +
')\n')
1308 ConfgFile.write(
'DestroyETSScreen()\n')
1310 ConfgFile.write(
'TRIGGERentry.delete(0,END)\n')
1311 ConfgFile.write(
'TRIGGERentry.insert(4, ' + TRIGGERentry.get() +
')\n')
1312 ConfgFile.write(
'HoldOffentry.delete(0,"end")\n')
1313 ConfgFile.write(
'HoldOffentry.insert(0, ' + HoldOffentry.get() +
')\n')
1314 ConfgFile.write(
'HozPossentry.delete(0,"end")\n')
1315 ConfgFile.write(
'HozPossentry.insert(0, ' + HozPossentry.get() +
')\n')
1316 ConfgFile.write(
'TMsb.delete(0,END)\n')
1317 ConfgFile.write(
'TMsb.insert(0, ' + TMsb.get() +
')\n')
1318 ConfgFile.write(
'TgInput.set(' + str(TgInput.get()) +
')\n')
1319 ConfgFile.write(
'AutoLevel.set(' + str(AutoLevel.get()) +
')\n')
1320 ConfgFile.write(
'ManualTrigger.set(' + str(ManualTrigger.get()) +
')\n')
1321 ConfgFile.write(
'SingleShot.set(' + str(SingleShot.get()) +
')\n')
1322 ConfgFile.write(
'TgEdge.set(' + str(TgEdge.get()) +
')\n')
1323 ConfgFile.write(
'Roll_Mode.set(' + str(Roll_Mode.get()) +
')\n')
1324 ConfgFile.write(
'Xsignal.set(' + str(Xsignal.get()) +
')\n')
1325 ConfgFile.write(
'YsignalVA.set(' + str(YsignalVA.get()) +
')\n')
1326 ConfgFile.write(
'YsignalIA.set(' + str(YsignalIA.get()) +
')\n')
1327 ConfgFile.write(
'YsignalVB.set(' + str(YsignalVB.get()) +
')\n')
1328 ConfgFile.write(
'YsignalIB.set(' + str(YsignalIB.get()) +
')\n')
1329 ConfgFile.write(
'YsignalM.set(' + str(YsignalM.get()) +
')\n')
1330 ConfgFile.write(
'YsignalMX.set(' + str(YsignalMX.get()) +
')\n')
1331 ConfgFile.write(
'YsignalMY.set(' + str(YsignalMY.get()) +
')\n')
1333 ConfgFile.write(
'TimeDisp.set(' + str(TimeDisp.get()) +
')\n')
1334 ConfgFile.write(
'XYDisp.set(' + str(XYDisp.get()) +
')\n')
1335 ConfgFile.write(
'FreqDisp.set(' + str(FreqDisp.get()) +
')\n')
1336 ConfgFile.write(
'IADisp.set(' + str(IADisp.get()) +
')\n')
1337 ConfgFile.write(
'ShowC1_V.set(' + str(ShowC1_V.get()) +
')\n')
1338 ConfgFile.write(
'ShowC1_I.set(' + str(ShowC1_I.get()) +
')\n')
1339 ConfgFile.write(
'ShowC2_V.set(' + str(ShowC2_V.get()) +
')\n')
1340 ConfgFile.write(
'ShowC2_I.set(' + str(ShowC2_I.get()) +
')\n')
1341 ConfgFile.write(
'Show_MathX.set(' + str(Show_MathX.get()) +
')\n')
1342 ConfgFile.write(
'Show_MathY.set(' + str(Show_MathY.get()) +
')\n')
1343 ConfgFile.write(
'AutoCenterA.set(' + str(AutoCenterA.get()) +
')\n')
1344 ConfgFile.write(
'AutoCenterB.set(' + str(AutoCenterB.get()) +
')\n')
1345 ConfgFile.write(
'TRACEmodeTime.set(' + str(TRACEmodeTime.get()) +
')\n')
1347 ConfgFile.write(
'CHAVPosEntry.delete(0,END)\n')
1348 ConfgFile.write(
'CHAVPosEntry.insert(4, ' + CHAVPosEntry.get() +
')\n')
1349 ConfgFile.write(
'CHAIPosEntry.delete(0,END)\n')
1350 ConfgFile.write(
'CHAIPosEntry.insert(4, ' + CHAIPosEntry.get() +
')\n')
1351 ConfgFile.write(
'CHAsb.delete(0,END)\n')
1352 ConfgFile.write(
'CHAsb.insert(0, ' + CHAsb.get() +
')\n')
1353 ConfgFile.write(
'CHAIsb.delete(0,END)\n')
1354 ConfgFile.write(
'CHAIsb.insert(0, ' + CHAIsb.get() +
')\n')
1356 ConfgFile.write(
'CHBVPosEntry.delete(0,END)\n')
1357 ConfgFile.write(
'CHBVPosEntry.insert(4, ' + CHBVPosEntry.get() +
')\n')
1358 ConfgFile.write(
'CHBIPosEntry.delete(0,END)\n')
1359 ConfgFile.write(
'CHBIPosEntry.insert(4, ' + CHBIPosEntry.get() +
')\n')
1360 ConfgFile.write(
'CHBsb.delete(0,END)\n')
1361 ConfgFile.write(
'CHBsb.insert(0, ' + CHBsb.get() +
')\n')
1362 ConfgFile.write(
'CHBIsb.delete(0,END)\n')
1363 ConfgFile.write(
'CHBIsb.insert(0, ' + CHBIsb.get() +
')\n')
1365 ConfgFile.write(
'AWG_Amp_Mode.set('+ str(AWG_Amp_Mode.get()) +
')\n')
1366 ConfgFile.write(
'AWGAMode.set('+ str(AWGAMode.get()) +
')\n')
1367 ConfgFile.write(
'AWGAIOMode.set('+ str(AWGAIOMode.get()) +
')\n')
1368 ConfgFile.write(
'AWGATerm.set('+ str(AWGATerm.get()) +
')\n')
1369 ConfgFile.write(
'AWGAPhaseDelay.set('+ str(AWGAPhaseDelay.get()) +
')\n')
1370 ConfgFile.write(
'AWGAAmplEntry.delete(0,END)\n')
1371 ConfgFile.write(
'AWGAAmplEntry.insert(4, ' + AWGAAmplEntry.get() +
')\n')
1372 ConfgFile.write(
'AWGAOffsetEntry.delete(0,END)\n')
1373 ConfgFile.write(
'AWGAOffsetEntry.insert(4, ' + AWGAOffsetEntry.get() +
')\n')
1374 ConfgFile.write(
'AWGAFreqEntry.delete(0,END)\n')
1375 ConfgFile.write(
'AWGAFreqEntry.insert(4, ' + AWGAFreqEntry.get() +
')\n')
1376 ConfgFile.write(
'AWGAPhaseEntry.delete(0,END)\n')
1377 ConfgFile.write(
'AWGAPhaseEntry.insert(4, ' + AWGAPhaseEntry.get() +
')\n')
1378 ConfgFile.write(
'AWGADutyCycleEntry.delete(0,END)\n')
1379 ConfgFile.write(
'AWGADutyCycleEntry.insert(4, ' + AWGADutyCycleEntry.get() +
')\n')
1380 ConfgFile.write(
'AWGAShape.set(' + str(AWGAShape.get()) +
')\n')
1381 ConfgFile.write(
'AWGARepeatFlag.set(' + str(AWGARepeatFlag.get()) +
')\n')
1382 ConfgFile.write(
'AWGABurstFlag.set(' + str(AWGABurstFlag.get()) +
')\n')
1383 ConfgFile.write(
'global AWGACycles; AWGACycles = ' + str(AWGACycles) +
'\n')
1384 ConfgFile.write(
'global AWGABurstDelay; AWGABurstDelay = ' + str(AWGABurstDelay) +
'\n')
1386 ConfgFile.write(
'AWGBMode.set('+ str(AWGBMode.get()) +
')\n')
1387 ConfgFile.write(
'AWGBIOMode.set('+ str(AWGBIOMode.get()) +
')\n')
1388 ConfgFile.write(
'AWGBTerm.set('+ str(AWGBTerm.get()) +
')\n')
1389 ConfgFile.write(
'AWGBPhaseDelay.set('+ str(AWGBPhaseDelay.get()) +
')\n')
1390 ConfgFile.write(
'AWGBAmplEntry.delete(0,END)\n')
1391 ConfgFile.write(
'AWGBAmplEntry.insert(4, ' + AWGBAmplEntry.get() +
')\n')
1392 ConfgFile.write(
'AWGBOffsetEntry.delete(0,END)\n')
1393 ConfgFile.write(
'AWGBOffsetEntry.insert(4, ' + AWGBOffsetEntry.get() +
')\n')
1394 ConfgFile.write(
'AWGBFreqEntry.delete(0,END)\n')
1395 ConfgFile.write(
'AWGBFreqEntry.insert(4, ' + AWGBFreqEntry.get() +
')\n')
1396 ConfgFile.write(
'AWGBPhaseEntry.delete(0,END)\n')
1397 ConfgFile.write(
'AWGBPhaseEntry.insert(4, ' + AWGBPhaseEntry.get() +
')\n')
1398 ConfgFile.write(
'AWGBDutyCycleEntry.delete(0,END)\n')
1399 ConfgFile.write(
'AWGBDutyCycleEntry.insert(4, ' + AWGBDutyCycleEntry.get() +
')\n')
1400 ConfgFile.write(
'AWGBShape.set(' + str(AWGBShape.get()) +
')\n')
1401 ConfgFile.write(
'AWGBRepeatFlag.set(' + str(AWGBRepeatFlag.get()) +
')\n')
1402 ConfgFile.write(
'AWGBBurstFlag.set(' + str(AWGBBurstFlag.get()) +
')\n')
1403 ConfgFile.write(
'global AWGBCycles; AWGBCycles = ' + str(AWGBCycles) +
'\n')
1404 ConfgFile.write(
'global AWGBBurstDelay; AWGBBurstDelay = ' + str(AWGBBurstDelay) +
'\n')
1406 ConfgFile.write(
'AWGSync.set(' + str(AWGSync.get()) +
')\n')
1407 ConfgFile.write(
'AWGAMathString = "' + AWGAMathString +
'"\n')
1408 ConfgFile.write(
'AWGBMathString = "' + AWGBMathString +
'"\n')
1409 ConfgFile.write(
'AWGAcsvFile = "' + AWGAcsvFile +
'"\n')
1410 ConfgFile.write(
'AWGBcsvFile = "' + AWGBcsvFile +
'"\n')
1411 ConfgFile.write(
'AWGAwavFile = "' + AWGAwavFile +
'"\n')
1412 ConfgFile.write(
'AWGBwavFile = "' + AWGBwavFile +
'"\n')
1414 if EnableScopeOnly == 0:
1415 ConfgFile.write(
'AWGANoiseEntry.delete(0,END)\n')
1416 ConfgFile.write(
'AWGANoiseEntry.insert(4, ' + AWGBNoiseEntry.get() +
')\n')
1417 ConfgFile.write(
'AWGBNoiseEntry.delete(0,END)\n')
1418 ConfgFile.write(
'AWGBNoiseEntry.insert(4, ' + AWGBNoiseEntry.get() +
')\n')
1419 ConfgFile.write(
'AWGAsbnoise.delete(0,END)\n')
1420 ConfgFile.write(
'AWGAsbnoise.insert(4, "'+ str(AWGAsbnoise.get()) +
'")\n')
1421 ConfgFile.write(
'AWGBsbnoise.delete(0,END)\n')
1422 ConfgFile.write(
'AWGBsbnoise.insert(4, "' + str(AWGBsbnoise.get()) +
'")\n')
1424 ConfgFile.write(
'CHAVGainEntry.delete(0,END)\n')
1425 ConfgFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1426 ConfgFile.write(
'CHBVGainEntry.delete(0,END)\n')
1427 ConfgFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1428 ConfgFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1429 ConfgFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1430 ConfgFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1431 ConfgFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1433 ConfgFile.write(
'MeasDCV1.set(' + str(MeasDCV1.get()) +
')\n')
1434 ConfgFile.write(
'MeasMinV1.set(' + str(MeasMinV1.get()) +
')\n')
1435 ConfgFile.write(
'MeasMaxV1.set(' + str(MeasMaxV1.get()) +
')\n')
1436 ConfgFile.write(
'MeasBaseV1.set(' + str(MeasBaseV1.get()) +
')\n')
1437 ConfgFile.write(
'MeasTopV1.set(' + str(MeasTopV1.get()) +
')\n')
1438 ConfgFile.write(
'MeasMidV1.set(' + str(MeasMidV1.get()) +
')\n')
1439 ConfgFile.write(
'MeasPPV1.set(' + str(MeasPPV1.get()) +
')\n')
1440 ConfgFile.write(
'MeasRMSV1.set(' + str(MeasRMSV1.get()) +
')\n')
1441 ConfgFile.write(
'MeasDCI1.set(' + str(MeasDCI1.get()) +
')\n')
1442 ConfgFile.write(
'MeasMinI1.set(' + str(MeasMinI1.get()) +
')\n')
1443 ConfgFile.write(
'MeasMaxI1.set(' + str(MeasMaxI1.get()) +
')\n')
1444 ConfgFile.write(
'MeasMidI1.set(' + str(MeasMidI1.get()) +
')\n')
1445 ConfgFile.write(
'MeasPPI1.set(' + str(MeasPPI1.get()) +
')\n')
1446 ConfgFile.write(
'MeasRMSI1.set(' + str(MeasRMSI1.get()) +
')\n')
1447 ConfgFile.write(
'MeasDiffAB.set(' + str(MeasDiffAB.get()) +
')\n')
1448 ConfgFile.write(
'MeasDCV2.set(' + str(MeasDCV2.get()) +
')\n')
1449 ConfgFile.write(
'MeasMinV2.set(' + str(MeasMinV2.get()) +
')\n')
1450 ConfgFile.write(
'MeasMaxV2.set(' + str(MeasMaxV2.get()) +
')\n')
1451 ConfgFile.write(
'MeasBaseV2.set(' + str(MeasBaseV2.get()) +
')\n')
1452 ConfgFile.write(
'MeasTopV2.set(' + str(MeasTopV2.get()) +
')\n')
1453 ConfgFile.write(
'MeasMidV2.set(' + str(MeasMidV2.get()) +
')\n')
1454 ConfgFile.write(
'MeasPPV2.set(' + str(MeasPPV2.get()) +
')\n')
1455 ConfgFile.write(
'MeasRMSV2.set(' + str(MeasRMSV2.get()) +
')\n')
1456 ConfgFile.write(
'MeasDCI2.set(' + str(MeasDCI2.get()) +
')\n')
1457 ConfgFile.write(
'MeasMinI2.set(' + str(MeasMinI2.get()) +
')\n')
1458 ConfgFile.write(
'MeasMaxI2.set(' + str(MeasMaxI2.get()) +
')\n')
1459 ConfgFile.write(
'MeasMidI2.set(' + str(MeasMidI2.get()) +
')\n')
1460 ConfgFile.write(
'MeasPPI2.set(' + str(MeasPPI2.get()) +
')\n')
1461 ConfgFile.write(
'MeasRMSI2.set(' + str(MeasRMSI2.get()) +
')\n')
1462 ConfgFile.write(
'MeasDiffBA.set(' + str(MeasDiffBA.get()) +
')\n')
1464 ConfgFile.write(
'MeasAHW.set(' + str(MeasAHW.get()) +
')\n')
1465 ConfgFile.write(
'MeasALW.set(' + str(MeasALW.get()) +
')\n')
1466 ConfgFile.write(
'MeasADCy.set(' + str(MeasADCy.get()) +
')\n')
1467 ConfgFile.write(
'MeasAPER.set(' + str(MeasAPER.get()) +
')\n')
1468 ConfgFile.write(
'MeasAFREQ.set(' + str(MeasAFREQ.get()) +
')\n')
1469 ConfgFile.write(
'MeasBHW.set(' + str(MeasBHW.get()) +
')\n')
1470 ConfgFile.write(
'MeasBLW.set(' + str(MeasBLW.get()) +
')\n')
1471 ConfgFile.write(
'MeasBDCy.set(' + str(MeasBDCy.get()) +
')\n')
1472 ConfgFile.write(
'MeasBPER.set(' + str(MeasBPER.get()) +
')\n')
1473 ConfgFile.write(
'MeasBFREQ.set(' + str(MeasBFREQ.get()) +
')\n')
1474 ConfgFile.write(
'MeasPhase.set(' + str(MeasPhase.get()) +
')\n')
1475 ConfgFile.write(
'MeasDelay.set(' + str(MeasDelay.get()) +
')\n')
1477 ConfgFile.write(
'MathTrace.set(' + str(MathTrace.get()) +
')\n')
1479 ConfgFile.write(
'CHAIGainEntry.delete(0,END)\n')
1480 ConfgFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1481 ConfgFile.write(
'CHBIGainEntry.delete(0,END)\n')
1482 ConfgFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1483 ConfgFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1484 ConfgFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1485 ConfgFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1486 ConfgFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1488 ConfgFile.write(
'UserAString = "' + UserAString +
'"\n')
1489 ConfgFile.write(
'UserALabel = "' + UserALabel +
'"\n')
1490 ConfgFile.write(
'UserBString = "' + UserBString +
'"\n')
1491 ConfgFile.write(
'UserBLabel = "' + UserBLabel +
'"\n')
1492 ConfgFile.write(
'FFTUserWindowString= "' + FFTUserWindowString +
'"\n')
1493 ConfgFile.write(
'DigFilterAString = "' + DigFilterAString +
'"\n')
1494 ConfgFile.write(
'DigFilterBString = "' + DigFilterBString +
'"\n')
1497 CHA_TC1.set(float(cha_TC1Entry.get()))
1498 CHA_TC2.set(float(cha_TC2Entry.get()))
1499 CHB_TC1.set(float(chb_TC1Entry.get()))
1500 CHB_TC2.set(float(chb_TC2Entry.get()))
1501 CHA_A1.set(float(cha_A1Entry.get()))
1502 CHA_A2.set(float(cha_A2Entry.get()))
1503 CHB_A1.set(float(chb_A1Entry.get()))
1504 CHB_A2.set(float(chb_A2Entry.get()))
1507 ConfgFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1508 ConfgFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1509 ConfgFile.write(
'CHAI_RC_HP.set(' + str(CHAI_RC_HP.get()) +
')\n')
1510 ConfgFile.write(
'CHBI_RC_HP.set(' + str(CHBI_RC_HP.get()) +
')\n')
1511 ConfgFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1512 ConfgFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1513 ConfgFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1514 ConfgFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1515 ConfgFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1516 ConfgFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1517 ConfgFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1518 ConfgFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1519 ConfgFile.write(
'cha_TC1Entry.delete(0,END)\n')
1520 ConfgFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1521 ConfgFile.write(
'cha_TC2Entry.delete(0,END)\n')
1522 ConfgFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1523 ConfgFile.write(
'chb_TC1Entry.delete(0,END)\n')
1524 ConfgFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1525 ConfgFile.write(
'chb_TC2Entry.delete(0,END)\n')
1526 ConfgFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1527 ConfgFile.write(
'cha_A1Entry.delete(0,END)\n')
1528 ConfgFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1529 ConfgFile.write(
'cha_A2Entry.delete(0,END)\n')
1530 ConfgFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1531 ConfgFile.write(
'chb_A1Entry.delete(0,END)\n')
1532 ConfgFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1533 ConfgFile.write(
'chb_A2Entry.delete(0,END)\n')
1534 ConfgFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1537 if SpectrumScreenStatus.get() > 0
or IAScreenStatus.get() > 0
or BodeScreenStatus.get() > 0:
1538 ConfgFile.write(
'SMPfftpwrTwo.set(' + str(SMPfftpwrTwo.get()) +
')\n')
1539 ConfgFile.write(
'FFTwindow.set(' + str(FFTwindow.get()) +
')\n')
1540 ConfgFile.write(
'ZEROstuffing.set(' + str(ZEROstuffing.get()) +
')\n')
1541 ConfgFile.write(
'Vdiv.set(' + str(Vdiv.get()) +
')\n')
1543 ConfgFile.write(
'DBdivindex.set(' + str(DBdivindex.get()) +
')\n')
1544 ConfgFile.write(
'DBlevel.set(' + str(DBlevel.get()) +
')\n')
1546 ConfgFile.write(
'CutDC.set(' + str(CutDC.get()) +
')\n')
1553 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1559 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1565 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1570 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1574 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1575 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1576 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
1577 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
1578 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1579 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1580 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1581 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1582 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1583 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1584 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1585 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1586 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1587 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1588 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1589 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1590 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1591 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1592 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1593 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1594 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1595 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1596 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1597 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1598 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1599 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1600 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1601 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1602 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
1603 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1604 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1605 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1606 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1607 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1608 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1609 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1610 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1611 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1612 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1613 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1614 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1615 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1616 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1617 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
1618 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
1619 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1620 global phawindow, PhAca, PhAScreenStatus, PhADisp
1621 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
1622 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
1623 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
1624 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
1625 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
1626 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
1627 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
1628 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
1632 ConfgFile = open(filename)
1633 for line
in ConfgFile:
1635 exec( line.rstrip(), globals(), globals())
1638 print(
"Skipping " + line.rstrip())
1640 if ScreenWidth < root.winfo_x()
or ScreenHeight < root.winfo_y():
1641 root.geometry(
'+0+0')
1643 if ScreenWidth < awgwindow.winfo_x()
or ScreenHeight < awgwindow.winfo_y():
1644 awgwindow.geometry(
'+0+0')
1648 if ScreenWidth < xywindow.winfo_x()
or ScreenHeight< xywindow.winfo_y():
1649 xywindow.geometry(
'+0+0')
1653 if ScreenWidth < iawindow.winfo_x()
or ScreenHeight < iawindow.winfo_y():
1654 iawindow.geometry(
'+0+0')
1658 if ScreenWidth < freqwindow.winfo_x()
or ScreenHeight < freqwindow.winfo_y():
1659 freqwindow.geometry(
'+0+0')
1663 if ScreenWidth < win1.winfo_x()
or ScreenHeight < win1.winfo_y():
1664 win1.geometry(
'+0+0')
1668 if ScreenWidth < win2.winfo_x()
or ScreenHeight < win2.winfo_y():
1669 win2.geometry(
'+0+0')
1673 if ScreenWidth < minigenwindow.winfo_x()
or ScreenHeight < minigenwindow.winfo_y():
1674 minigenwindow.geometry(
'+0+0')
1678 if ScreenWidth < muxwindow.winfo_x()
or ScreenHeight < muxwindow.winfo_y():
1679 muxwindow.geometry(
'+0+0')
1683 if ScreenWidth < phawindow.winfo_x()
or ScreenHeight < phawindow.winfo_y():
1684 phawindow.geometry(
'+0+0')
1688 if ScreenWidth < bodewindow.winfo_x()
or ScreenHeight < bodewindow.winfo_y():
1689 bodewindow.geometry(
'+0+0')
1693 if ScreenWidth < measurewindow.winfo_x()
or ScreenHeight < measurewindow.winfo_y():
1694 measurewindow.geometry(
'+0+0')
1698 if ScreenWidth < etswindow.winfo_x()
or ScreenHeight < etswindow.winfo_y():
1699 etswindow.geometry(
'+0+0')
1702 if Roll_Mode.get() == 0:
1703 RollBt.config(style=
"RollOff.TButton",text=
"Roll-Off")
1705 RollBt.config(style=
"Roll.TButton",text=
"Roll-On")
1706 if DevID !=
"No Device":
1711 if ColorMode.get() > 0:
1713 if TRACEwidth.get() < 2:
1715 COLORtext =
"#000000"
1716 COLORtrace4 =
"#a0a000"
1717 COLORtraceR4 =
"#606000"
1718 COLORcanvas =
"#ffffff"
1721 COLORcanvas =
"#000000"
1722 COLORtrace4 =
"#ffff00"
1723 COLORtraceR4 =
"#808000"
1724 COLORtext =
"#ffffff"
1725 ca.config(background=COLORcanvas)
1727 if AWGAShape.get()==6:
1729 if AWGAShape.get()==13:
1731 if AWGBShape.get()==6:
1733 if AWGBShape.get()==13:
1736 if AWGAShape.get()==10:
1738 if AWGBShape.get()==10:
1740 if EnableScopeOnly == 0:
1758 print(
"Config File Not Found.")
1762 global AWGAShape, AWGBShape, BisCompA, AWGAShapeLabel, AWGBShapeLabel
1763 global AWGALength, AWGBLength, AWGAwaveform, AWGBwaveform, EnableScopeOnly
1765 if AWGAShape.get()==9:
1767 AWGAShapeLabel.config(text =
"Impulse")
1768 elif AWGAShape.get()==11:
1770 AWGAShapeLabel.config(text =
"Trapazoid")
1771 elif AWGAShape.get()==15:
1773 AWGAShapeLabel.config(text =
"SSQ Pulse")
1774 elif AWGAShape.get()==16:
1776 AWGAShapeLabel.config(text =
"Ramp")
1777 elif AWGAShape.get()==17:
1779 AWGAShapeLabel.config(text =
"PWN Sine")
1780 elif AWGAShape.get()==18:
1782 AWGAShapeLabel.config(text =
"Hi Res Sine")
1783 elif AWGAShape.get()==12:
1785 AWGAShapeLabel.config(text =
"Up Down Ramp")
1786 elif AWGAShape.get()==14:
1788 AWGAShapeLabel.config(text =
"Fourier Series")
1789 elif AWGAShape.get()==19:
1791 AWGAShapeLabel.config(text =
"Sinc Pulse")
1792 elif AWGAShape.get()==20:
1794 AWGAShapeLabel.config(text =
"Pulse")
1795 elif AWGAShape.get()==21:
1797 AWGAShapeLabel.config(text =
"FM Sine")
1798 elif AWGAShape.get()==22:
1800 AWGAShapeLabel.config(text =
"AM Sine")
1801 elif AWGAShape.get()==7:
1803 AWGAShapeLabel.config(text =
"UU Noise")
1804 elif AWGAShape.get()==8:
1806 AWGAShapeLabel.config(text =
"UG Noise")
1807 elif AWGAShape.get()==0:
1808 AWGAShapeLabel.config(text =
"DC")
1809 elif AWGAShape.get()==2:
1810 AWGAShapeLabel.config(text =
"Triangle")
1811 elif AWGAShape.get()==4:
1812 AWGAShapeLabel.config(text =
"Square")
1813 elif AWGAShape.get()==3:
1814 AWGAShapeLabel.config(text =
"Saw Tooth")
1815 elif AWGAShape.get()==5:
1816 AWGAShapeLabel.config(text =
"Starestep")
1817 elif AWGAShape.get()==6:
1818 AWGAShapeLabel.config(text =
"CSV File")
1819 elif AWGAShape.get()==13:
1820 AWGAShapeLabel.config(text =
"Wav File")
1821 elif AWGAShape.get()==10:
1822 AWGAShapeLabel.config(text =
"Math")
1824 AWGAShapeLabel.config(text =
"Other Shape")
1826 if BisCompA.get() == 1:
1828 if AWGBShape.get()==9:
1830 AWGBShapeLabel.config(text =
"Impulse")
1831 elif AWGBShape.get()==11:
1833 AWGBShapeLabel.config(text =
"Trapazoid")
1834 elif AWGBShape.get()==15:
1836 AWGBShapeLabel.config(text =
"SSQ Pulse")
1837 elif AWGBShape.get()==16:
1839 AWGBShapeLabel.config(text =
"Ramp")
1840 elif AWGBShape.get()==17:
1842 AWGBShapeLabel.config(text =
"PWN Sine")
1843 elif AWGBShape.get()==18:
1845 AWGBShapeLabel.config(text =
"Hi Res Sine")
1846 elif AWGBShape.get()==12:
1848 AWGBShapeLabel.config(text =
"Up Down Ramp")
1849 elif AWGBShape.get()==14:
1851 AWGBShapeLabel.config(text =
"Fourier Series")
1852 elif AWGBShape.get()==19:
1854 AWGBShapeLabel.config(text =
"Sinc Pulse")
1855 elif AWGBShape.get()==20:
1857 AWGBShapeLabel.config(text =
"Pulse")
1858 elif AWGBShape.get()==7:
1860 AWGBShapeLabel.config(text =
"UU Noise")
1861 elif AWGBShape.get()==8:
1863 AWGBShapeLabel.config(text =
"UG Noise")
1864 elif AWGBShape.get()==0:
1865 AWGBShapeLabel.config(text =
"DC")
1866 elif AWGBShape.get()==2:
1867 AWGBShapeLabel.config(text =
"Triangle")
1868 elif AWGBShape.get()==4:
1869 AWGBShapeLabel.config(text =
"Square")
1870 elif AWGBShape.get()==3:
1871 AWGBShapeLabel.config(text =
"Saw Tooth")
1872 elif AWGBShape.get()==5:
1873 AWGBShapeLabel.config(text =
"Starestep")
1874 elif AWGBShape.get()==6:
1875 AWGBShapeLabel.config(text =
"CSV File")
1876 elif AWGBShape.get()==13:
1877 AWGBShapeLabel.config(text =
"Wav File")
1878 elif AWGBShape.get()==10:
1879 AWGBShapeLabel.config(text =
"Math")
1881 AWGBShapeLabel.config(text =
"Other Shape")
1882 if EnableScopeOnly == 0:
1883 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
1884 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
1891 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1897 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1903 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1909 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1914 global VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
1915 global VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAwaveform, AWGBwaveform
1916 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1917 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1918 global TRIGGERentry, TMsb, Xsignal, AutoCenterA, AutoCenterB
1919 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMX, YsignalMY
1920 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1921 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1922 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1923 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1924 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1925 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1926 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1927 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1928 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1929 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1930 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1931 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1932 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1933 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1934 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1935 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1936 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1937 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1938 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1939 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1940 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1941 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1942 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1943 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1944 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
1945 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1946 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1947 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1948 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1949 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1950 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1951 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1952 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1953 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1954 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1955 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1956 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1957 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1958 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1959 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
1960 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
1961 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1962 global phawindow, PhAca, PhAScreenStatus, PhADisp
1963 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
1964 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
1965 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
1966 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
1967 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
1968 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
1969 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
1970 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
1971 global DFiltACoef, DFiltBCoef, AWGACoef, AWGBCoef
1973 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Script files",
"*.txt")], parent=root)
1976 ConfgFile = open(filename)
1977 for line
in ConfgFile:
1979 exec( line.rstrip(), globals(), globals())
1982 print(
"Skipping " + line.rstrip())
1983 showwarning(
"Syntax Error!",(
"Syntax Error found in line:\n " + line.rstrip()))
1986 print(
"Config File Not Found.")
1987 showwarning(
"Warning!",
"Script File Not Found.")
1991 global COLORtext, COLORcanvas, ColorMode, Bodeca, BodeScreenStatus, PhAca, PhAScreenStatus
1992 global ca, Freqca, SpectrumScreenStatus, XYca, XYScreenStatus, IAca, IAScreenStatus
1993 global COLORtrace4, COLORtraceR4, TRACEwidth
1995 if ColorMode.get() > 0:
1996 if TRACEwidth.get() < 2:
1998 COLORtext =
"#000000"
1999 COLORtrace4 =
"#a0a000"
2000 COLORtraceR4 =
"#606000"
2001 COLORcanvas =
"#ffffff"
2003 COLORcanvas =
"#000000"
2004 COLORtrace4 =
"#ffff00"
2005 COLORtraceR4 =
"#808000"
2006 COLORtext =
"#ffffff"
2007 ca.config(background=COLORcanvas)
2009 if SpectrumScreenStatus.get() > 0:
2010 Freqca.config(background=COLORcanvas)
2012 if XYScreenStatus.get() > 0:
2013 XYca.config(background=COLORcanvas)
2015 if PhAScreenStatus.get() > 0:
2016 PhAca.config(background=COLORcanvas)
2018 if IAScreenStatus.get() > 0:
2019 IAca.config(background=COLORcanvas)
2021 if BodeScreenStatus.get() > 0:
2022 Bodeca.config(background=COLORcanvas)
2026 global CANVASwidth, CANVASheight
2027 global COLORtext, MarkerNum, ColorMode
2029 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")])
2030 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n")
2031 if MarkerNum > 0
or ColorMode.get() > 0:
2032 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
2034 COLORtext =
"#000000"
2037 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
2041 COLORtext =
"#ffffff"
2045 global CANVASwidthXY, CANVASheightXY, xywindow
2046 global COLORtext, MarkerNum, ColorMode, XYca
2048 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=xywindow)
2049 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=xywindow)
2050 if MarkerNum > 0
or ColorMode.get() > 0:
2051 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
2053 COLORtext =
"#000000"
2056 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
2060 COLORtext =
"#ffffff"
2064 global CANVASwidthIA, CANVASheightIA
2065 global COLORtext, IAca, ColorMode, iawindow
2067 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=iawindow)
2068 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=iawindow)
2069 if ColorMode.get() > 0:
2070 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
2072 COLORtext =
"#000000"
2075 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
2077 COLORtext =
"#ffffff"
2081 global CANVASwidthBP, CANVASheightBP
2082 global COLORtext, Bodeca, bodewindow
2084 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent = bodewindow)
2085 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=bodewindow)
2086 if MarkerNum > 0
or ColorMode.get() > 0:
2087 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
2089 COLORtext =
"#000000"
2092 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
2094 COLORtext =
"#ffffff"
2098 global VBuffA, VBuffB, IBuffA, IBuffB, SAMPLErate
2101 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2102 DataFile = open(filename,
'w')
2103 DataFile.write(
'Sample-#, CA-V, CA-I, CB-V, CB-I \n' )
2104 for index
in range(len(VBuffA)):
2105 TimePnt = float((index+0.0)/SAMPLErate)
2106 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
', ' + str(IBuffA[index]) +
', '
2107 + str(VBuffB[index]) +
', ' + str(IBuffB[index]) +
'\n')
2111 global SAMPLErate, VBuffMA, VBuffMB, VBuffMC, VBuffMD
2113 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2114 DataFile = open(filename,
'w')
2115 DataFile.write(
'Sample-#, MuxA, MuxB, MuxC, MuxD \n' )
2117 for index
in range(len(VBuffMA)):
2118 TimePnt = float((index+0.0)/SAMPLErate)
2119 DataFile.write( str(TimePnt) +
', ' + str(VBuffMA[index]) +
', ' + str(VBuffMB[index]) +
', '
2120 + str(VBuffMC[index]) +
', ' + str(VBuffMD[index]) +
'\n')
2125 global SAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB, VBuffMA, VBuffMB, VBuffMC, VBuffMD
2128 Channel = askstring(
"Choose Channel",
"CA-V, CB-V, CA-I, CB-I\n MuxA, MuxB, MuxC, MuxD \n Channel:\n", initialvalue=
"CA-V")
2129 if (Channel ==
None):
2132 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
2133 DataFile = open(filename,
'w')
2134 if Channel ==
"CA-V":
2135 DataFile.write(
'Sample-#, CA-V\n' )
2136 for index
in range(len(VBuffA)):
2137 TimePnt = float((index+0.0)/SAMPLErate)
2138 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
'\n')
2139 elif Channel ==
"CA-I":
2140 DataFile.write(
'Sample-#, CA-I,\n' )
2141 for index
in range(len(IBuffA)):
2142 TimePnt = float((index+0.0)/SAMPLErate)
2143 DataFile.write( str(TimePnt) +
', ' + str(IBuffA[index]) +
'\n')
2144 elif Channel ==
"CB-V":
2145 DataFile.write(
'Sample-#, CB-V\n' )
2146 for index
in range(len(VBuffB)):
2147 TimePnt = float((index+0.0)/SAMPLErate)
2148 DataFile.write( str(TimePnt) +
', ' + str(VBuffB[index]) +
'\n')
2149 elif Channel ==
"CB-I":
2150 DataFile.write(
'Sample-#, CB-I,\n' )
2151 for index
in range(len(IBuffB)):
2152 TimePnt = float((index+0.0)/SAMPLErate)
2153 DataFile.write( str(TimePnt) +
', ' + str(IBuffB[index]) +
'\n')
2154 elif Channel ==
"MuxA":
2155 DataFile.write(
'Sample-#, MuxA\n' )
2156 for index
in range(len(VBuffMA)):
2157 TimePnt = float((index+0.0)/SAMPLErate)
2158 DataFile.write( str(TimePnt) +
', ' + str(VBuffMA[index]) +
'\n')
2159 elif Channel ==
"MuxB":
2160 DataFile.write(
'Sample-#, MuxB\n' )
2161 for index
in range(len(VBuffMB)):
2162 TimePnt = float((index+0.0)/SAMPLErate)
2163 DataFile.write( str(TimePnt) +
', ' + str(VBuffMB[index]) +
'\n')
2164 elif Channel ==
"MuxC":
2165 DataFile.write(
'Sample-#, MuxC\n' )
2166 for index
in range(len(VBuffMC)):
2167 TimePnt = float((index+0.0)/SAMPLErate)
2168 DataFile.write( str(TimePnt) +
', ' + str(VBuffMC[index]) +
'\n')
2169 elif Channel ==
"MuxD":
2170 DataFile.write(
'Sample-#, MuxD\n' )
2171 for index
in range(len(VBuffMD)):
2172 TimePnt = float((index+0.0)/SAMPLErate)
2173 DataFile.write( str(TimePnt) +
', ' + str(VBuffMD[index]) +
'\n')
2177 global VBuffA, VBuffB, IBuffA, IBuffB, SHOWsamples
2180 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")])
2182 CSVFile = open(filename)
2183 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
2185 csv_f = csv.reader(CSVFile, dialect)
2193 VBuffA.append(float(row[1]))
2194 IBuffA.append(float(row[2]))
2195 VBuffB.append(float(row[3]))
2196 IBuffB.append(float(row[4]))
2197 SHOWsamples = SHOWsamples + 1
2199 print(
'skipping non-numeric row')
2200 VBuffA = numpy.array(VBuffA)
2201 IBuffA = numpy.array(IBuffA)
2202 VBuffB = numpy.array(VBuffB)
2203 IBuffB = numpy.array(IBuffB)
2207 showwarning(
"WARNING",
"No such file found or wrong format!")
2212 url =
"https://wiki.analog.com/university/tools/m1k/alice/desk-top-users-guide"
2213 webbrowser.open(url,new=2)
2216 global RevDate, SWRev, FWRevOne, HWRevOne, DevID, Version_url
2219 if sys.version_info[0] == 2:
2220 u = urllib2.urlopen(Version_url)
2221 if sys.version_info[0] == 3:
2222 u = urllib.request.urlopen(Version_url)
2224 time_string = str(meta.getheaders(
"Last-Modified"))
2226 time_string =
"Unavailable"
2227 showinfo(
"About ALICE",
"ALICE DeskTop" + SWRev + RevDate +
"\n" +
2228 "Last Released Version: " + time_string[7:18] +
"\n" +
2229 "ADALM1000 Hardware Rev " + str(HWRevOne) +
"\n" +
2230 "Firmware Rev " + str(FWRevOne) +
"\n" +
2231 "Board Serial Number " + DevID +
"\n" +
2232 "Software is provided as is without any Warranty")
2236 global T1Vline, T2Vline, T1Iline, T2Iline
2237 global Tmathline, TMRline, TXYRline
2238 global T1VRline, T2VRline, T1IRline, T2IRline, TMCVline, TMDVline
2239 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowMath, MathTrace
2240 global MuxScreenStatus, TMARline, TMBRline, TMCRline, TMDRline
2241 global TMAVline, TMBVline, TMCVline, TMDVline
2242 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb
2243 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
2245 if ShowC1_V.get() == 1:
2247 if ShowC2_V.get() == 1:
2249 if ShowC1_I.get() == 1:
2251 if ShowC2_I.get() == 1:
2253 if MathTrace.get() > 0:
2255 if MuxScreenStatus.get() > 0:
2256 if Show_CBA.get() > 0:
2258 if Show_CBB.get() > 0:
2260 if Show_CBC.get() > 0:
2262 if Show_CBD.get() > 0:
2267 global XYlineVA, XYlineIA, XYlineVB, XYlineIB, XYlineM, XYlineMX, XYlineMY
2268 global XYRlineVA, XYRlineIA, XYRlineVB, XYRlineIB, XYRlineM, XYRlineMX, XYRlineMY
2270 if len(XYlineVA) > 4:
2271 XYRlineVA = XYlineVA
2272 if len(XYlineVB) > 4:
2273 XYRlineVB = XYlineVB
2274 if len(XYlineIA) > 4:
2275 XYRlineIA = XYlineIA
2276 if len(XYlineIB) > 4:
2277 XYRlineIB = XYlineIB
2278 if len(XYlineM) > 4:
2280 if len(XYlineMX) > 4:
2281 XYRlineMX = XYlineMX
2282 if len(XYlineMY) > 4:
2283 XYRlineMY = XYlineMY
2287 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
2288 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
2290 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
2291 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
2292 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
2293 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2295 devidstr = DevID[17:31]
2296 filename = devidstr +
"_O.cal"
2297 CalFile = open(filename,
"w")
2299 CalFile.write(
'CHAVGainEntry.delete(0,END)\n')
2300 CalFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
2301 CalFile.write(
'CHBVGainEntry.delete(0,END)\n')
2302 CalFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
2303 CalFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
2304 CalFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
2305 CalFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
2306 CalFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
2308 CalFile.write(
'CHAIGainEntry.delete(0,END)\n')
2309 CalFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
2310 CalFile.write(
'CHBIGainEntry.delete(0,END)\n')
2311 CalFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
2312 CalFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
2313 CalFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
2314 CalFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
2315 CalFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
2319 CHA_TC1.set(float(cha_TC1Entry.get()))
2320 CHA_TC2.set(float(cha_TC2Entry.get()))
2321 CHB_TC1.set(float(chb_TC1Entry.get()))
2322 CHB_TC2.set(float(chb_TC2Entry.get()))
2323 CHA_A1.set(float(cha_A1Entry.get()))
2324 CHA_A2.set(float(cha_A2Entry.get()))
2325 CHB_A1.set(float(chb_A1Entry.get()))
2326 CHB_A2.set(float(chb_A2Entry.get()))
2329 CalFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
2330 CalFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
2331 CalFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
2332 CalFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
2333 CalFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
2334 CalFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
2335 CalFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
2336 CalFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
2337 CalFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
2338 CalFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
2339 CalFile.write(
'cha_TC1Entry.delete(0,END)\n')
2340 CalFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
2341 CalFile.write(
'cha_TC2Entry.delete(0,END)\n')
2342 CalFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
2343 CalFile.write(
'chb_TC1Entry.delete(0,END)\n')
2344 CalFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
2345 CalFile.write(
'chb_TC2Entry.delete(0,END)\n')
2346 CalFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
2347 CalFile.write(
'cha_A1Entry.delete(0,END)\n')
2348 CalFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
2349 CalFile.write(
'cha_A2Entry.delete(0,END)\n')
2350 CalFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
2351 CalFile.write(
'chb_A1Entry.delete(0,END)\n')
2352 CalFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
2353 CalFile.write(
'chb_A2Entry.delete(0,END)\n')
2354 CalFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
2359 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
2360 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
2362 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
2363 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
2364 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
2365 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2367 devidstr = DevID[17:31]
2368 filename = devidstr +
"_O.cal"
2370 CalFile = open(filename)
2371 for line
in CalFile:
2372 exec( line.rstrip() )
2375 print(
"Cal file for this device not found")
2378 global UserAString, UserALabel, MeasUserA
2380 TempString = UserALabel
2381 UserALabel = askstring(
"Measurement Label",
"Current Label: " + UserALabel +
"\n\nNew Label:\n", initialvalue=UserALabel)
2382 if (UserALabel ==
None):
2384 UserALabel = TempString
2386 TempString = UserAString
2387 UserAString = askstring(
"Measurement Formula",
"Current Formula: " + UserAString +
"\n\nNew Formula:\n", initialvalue=UserAString)
2388 if (UserAString ==
None):
2390 UserAString = TempString
2395 global UserBString, UserBLabel, MeasUserB
2397 TempString = UserBLabel
2398 UserBLabel = askstring(
"Measurement Label",
"Current Label: " + UserBLabel +
"\n\nNew Label:\n", initialvalue=UserBLabel)
2399 if (UserBLabel ==
None):
2401 UserBLabel = TempString
2403 TempString = UserBString
2404 UserBString = askstring(
"Measurement Formula",
"Current Formula: " + UserBString +
"\n\nNew Formula:\n", initialvalue=UserBString)
2405 if (UserBString ==
None):
2407 UserBString = TempString
2413 global LabelPlotText, PlotLabelText
2415 TempString = PlotLabelText
2416 PlotLabelText = askstring(
"Custom Label",
"Current Plot Label: " + PlotLabelText +
"\n\nNew Label:\n", initialvalue=PlotLabelText)
2417 if (PlotLabelText ==
None):
2418 LabelPlotText.set(0)
2419 PlotLabelText = TempString
2421 LabelPlotText.set(1)
2424 global RUNstatus, MathScreenStatus, MathWindow, SWRev, RevDate
2425 global MathString, MathUnits, MathXString, MathXUnits, MathYString, MathYUnits
2426 global MathAxis, MathXAxis, MathYAxis, MathTrace
2427 global formentry, unitsentry, axisentry, xformentry, xunitsentry, xaxisentry, yformentry, yunitsentry, yaxisentry
2428 global formlab, xformlab, yformlab, FrameBG
2429 global Mframe1, Mframe2, Mframe3, Mframe4
2431 if MathScreenStatus.get() == 0:
2432 MathScreenStatus.set(1)
2434 MathWindow = Toplevel()
2435 MathWindow.title(
"Math Formula " + SWRev + RevDate)
2436 MathWindow.resizable(FALSE,FALSE)
2437 MathWindow.protocol(
"WM_DELETE_WINDOW", DestroyMathScreen)
2438 MathWindow.configure(background=FrameBG)
2439 Mframe1 = LabelFrame(MathWindow, text=
"Built-in Exp", style=
"A10T5.TLabelframe")
2440 Mframe2 = LabelFrame(MathWindow, text=
"Math Trace", style=
"A10T5.TLabelframe")
2441 Mframe3 = LabelFrame(MathWindow, text=
"X Math Trace", style=
"A10T6.TLabelframe")
2442 Mframe4 = LabelFrame(MathWindow, text=
"Y Math Trace", style=
"A10T7.TLabelframe")
2445 Mframe1.grid(row = 0, column=0, rowspan=3, sticky=W)
2446 Mframe2.grid(row = 0, column=1, sticky=W)
2447 Mframe3.grid(row = 1, column=1, sticky=W)
2448 Mframe4.grid(row = 2, column=1, sticky=W)
2452 mrb1 = Radiobutton(Mframe1, text=
'none', variable=MathTrace, value=0, command=UpdateTimeTrace)
2453 mrb1.grid(row=0, column=0, sticky=W)
2454 mrb2 = Radiobutton(Mframe1, text=
'CAV+CBV', variable=MathTrace, value=1, command=UpdateTimeTrace)
2455 mrb2.grid(row=1, column=0, sticky=W)
2456 mrb3 = Radiobutton(Mframe1, text=
'CAV-CBV', variable=MathTrace, value=2, command=UpdateTimeTrace)
2457 mrb3.grid(row=2, column=0, sticky=W)
2458 mrb4 = Radiobutton(Mframe1, text=
'CBV-CAV', variable=MathTrace, value=3, command=UpdateTimeTrace)
2459 mrb4.grid(row=3, column=0, sticky=W)
2460 mrb5 = Radiobutton(Mframe1, text=
'CAI-CBI', variable=MathTrace, value=8, command=UpdateTimeTrace)
2461 mrb5.grid(row=4, column=0, sticky=W)
2462 mrb6 = Radiobutton(Mframe1, text=
'CBI-CAI', variable=MathTrace, value=9, command=UpdateTimeTrace)
2463 mrb6.grid(row=5, column=0, sticky=W)
2464 mrb7 = Radiobutton(Mframe1, text=
'CAV*CAI', variable=MathTrace, value=4, command=UpdateTimeTrace)
2465 mrb7.grid(row=6, column=0, sticky=W)
2466 mrb8 = Radiobutton(Mframe1, text=
'CBV*CBI', variable=MathTrace, value=5, command=UpdateTimeTrace)
2467 mrb8.grid(row=7, column=0, sticky=W)
2468 mrb9 = Radiobutton(Mframe1, text=
'CAV/CAI', variable=MathTrace, value=6, command=UpdateTimeTrace)
2469 mrb9.grid(row=8, column=0, sticky=W)
2470 mrb10 = Radiobutton(Mframe1, text=
'CBV/CBI', variable=MathTrace, value=7, command=UpdateTimeTrace)
2471 mrb10.grid(row=9, column=0, sticky=W)
2472 mrb11 = Radiobutton(Mframe1, text=
'CBV/CAV', variable=MathTrace, value=10, command=UpdateTimeTrace)
2473 mrb11.grid(row=10, column=0, sticky=W)
2474 mrb12 = Radiobutton(Mframe1, text=
'CBI/CAI', variable=MathTrace, value=11, command=UpdateTimeTrace)
2475 mrb12.grid(row=11, column=0, sticky=W)
2476 mrb13 = Radiobutton(Mframe1, text=
'Formula', variable=MathTrace, value=12, command=UpdateTimeTrace)
2477 mrb13.grid(row=12, column=0, sticky=W)
2481 sframe2a = Frame( Mframe2 )
2482 sframe2a.pack(side=TOP)
2483 formlab = Label(sframe2a, text=
" Formula ", style=
"A10B.TLabel")
2484 formlab.pack(side=LEFT)
2485 formentry = Entry(sframe2a, width=23)
2486 formentry.pack(side=LEFT)
2487 formentry.delete(0,
"end")
2488 formentry.insert(0,MathString)
2489 sframe2b = Frame( Mframe2 )
2490 sframe2b.pack(side=TOP)
2491 unitslab = Label(sframe2b, text=
"Units ", style=
"A10B.TLabel")
2492 unitslab.pack(side=LEFT)
2493 unitsentry = Entry(sframe2b, width=6)
2494 unitsentry.pack(side=LEFT)
2495 unitsentry.delete(0,
"end")
2496 unitsentry.insert(0,MathUnits)
2497 checkbt = Button(sframe2b, text=
"Check", command=CheckMathString )
2498 checkbt.pack(side=LEFT)
2499 sframe2c = Frame( Mframe2 )
2500 sframe2c.pack(side=TOP)
2501 axislab = Label(sframe2c, text=
"Axis ", style=
"A10B.TLabel")
2502 axislab.pack(side=LEFT)
2503 axisentry = Entry(sframe2c, width=4)
2504 axisentry.pack(side=LEFT)
2505 axisentry.delete(0,
"end")
2506 axisentry.insert(0,MathAxis)
2507 applybt = Button(sframe2c, text=
"Apply", command=ApplyMathString )
2508 applybt.pack(side=LEFT)
2512 sframe3a = Frame( Mframe3 )
2513 sframe3a.pack(side=TOP)
2514 xformlab = Label(sframe3a, text=
"X Formula ", style=
"A10B.TLabel")
2515 xformlab.pack(side=LEFT)
2516 xformentry = Entry(sframe3a, width=23)
2517 xformentry.pack(side=LEFT)
2518 xformentry.delete(0,
"end")
2519 xformentry.insert(0, MathXString)
2520 sframe3b = Frame( Mframe3 )
2521 sframe3b.pack(side=TOP)
2522 xunitslab = Label(sframe3b, text=
"X Units ", style=
"A10B.TLabel")
2523 xunitslab.pack(side=LEFT)
2524 xunitsentry = Entry(sframe3b, width=6)
2525 xunitsentry.pack(side=LEFT)
2526 xunitsentry.delete(0,
"end")
2527 xunitsentry.insert(0, MathXUnits)
2528 xcheckbt = Button(sframe3b, text=
"Check", command=CheckMathXString )
2529 xcheckbt.pack(side=LEFT)
2530 sframe3c = Frame( Mframe3 )
2531 sframe3c.pack(side=TOP)
2532 xaxislab = Label(sframe3c, text=
"X Axis ", style=
"A10B.TLabel")
2533 xaxislab.pack(side=LEFT)
2534 xaxisentry = Entry(sframe3c, width=4)
2535 xaxisentry.pack(side=LEFT)
2536 xaxisentry.delete(0,
"end")
2537 xaxisentry.insert(0, MathXAxis)
2538 xapplybt = Button(sframe3c, text=
"Apply", command=ApplyMathXString )
2539 xapplybt.pack(side=LEFT)
2543 sframe4a = Frame( Mframe4 )
2544 sframe4a.pack(side=TOP)
2545 yformlab = Label(sframe4a, text=
"Y Formula ", style=
"A10B.TLabel")
2546 yformlab.pack(side=LEFT)
2547 yformentry = Entry(sframe4a, width=23)
2548 yformentry.pack(side=LEFT)
2549 yformentry.delete(0,
"end")
2550 yformentry.insert(0,MathYString)
2551 sframe4b = Frame( Mframe4 )
2552 sframe4b.pack(side=TOP)
2553 yunitslab = Label(sframe4b, text=
"Y Units ", style=
"A10B.TLabel")
2554 yunitslab.pack(side=LEFT)
2555 yunitsentry = Entry(sframe4b, width=6)
2556 yunitsentry.pack(side=LEFT)
2557 yunitsentry.delete(0,
"end")
2558 yunitsentry.insert(0,MathYUnits)
2559 ycheckbt = Button(sframe4b, text=
"Check", command=CheckMathYString )
2560 ycheckbt.pack(side=LEFT)
2561 sframe4c = Frame( Mframe4 )
2562 sframe4c.pack(side=TOP)
2563 yaxislab = Label(sframe4c, text=
"Y Axis ", style=
"A10B.TLabel")
2564 yaxislab.pack(side=LEFT)
2565 yaxisentry = Entry(sframe4c, width=4)
2566 yaxisentry.pack(side=LEFT)
2567 yaxisentry.delete(0,
"end")
2568 yaxisentry.insert(0,MathYAxis)
2569 yapplybt = Button(sframe4c, text=
"Apply", command=ApplyMathYString )
2570 yapplybt.pack(side=LEFT)
2572 dismissbutton = Button(MathWindow, text=
"Dismiss", command=DestroyMathScreen)
2573 dismissbutton.grid(row=3, column=0, sticky=W)
2575 if RUNstatus.get() > 0:
2579 global MathScreenStatus, MathWindow
2581 if MathScreenStatus.get() == 1:
2582 MathScreenStatus.set(0)
2583 MathWindow.destroy()
2586 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry, formlab
2587 global VBuffA, VBuffB, IBuffA, IBuffB
2588 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2589 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2590 global FFTBuffA, FFTBuffB, FFTwindowshape
2591 global AWGAwaveform, AWGBwaveform
2592 global Show_MathX, Show_MathY
2593 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2594 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2597 TempString = formentry.get()
2599 MathResult = eval(TempString)
2600 formlab.configure(text=
"Formula ", style=
"A10G.TLabel")
2602 formlab.configure(text=
"Formula ", style=
"A10R.TLabel")
2605 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry, xformlab
2606 global VBuffA, VBuffB, IBuffA, IBuffB
2607 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2608 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2609 global FFTBuffA, FFTBuffB, FFTwindowshape
2610 global AWGAwaveform, AWGBwaveform
2611 global Show_MathX, Show_MathY
2612 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2613 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2616 TempString = xformentry.get()
2618 MathResult = eval(TempString)
2619 xformlab.configure(text=
"X Formula ", style=
"A10G.TLabel")
2621 xformlab.configure(text=
"X Formula ", style=
"A10R.TLabel")
2624 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry, yformlab
2625 global VBuffA, VBuffB, IBuffA, IBuffB
2626 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2627 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2628 global FFTBuffA, FFTBuffB, FFTwindowshape
2629 global AWGAwaveform, AWGBwaveform
2630 global Show_MathX, Show_MathY
2631 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2632 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2635 TempString = yformentry.get()
2637 MathResult = eval(TempString)
2638 yformlab.configure(text=
"Y Formula ", style=
"A10G.TLabel")
2640 yformlab.configure(text=
"Y Formula ", style=
"A10R.TLabel")
2643 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry
2645 MathString = formentry.get()
2646 MathUnits = unitsentry.get()
2647 MathAxis = axisentry.get()
2650 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry
2652 MathXString = xformentry.get()
2653 MathXUnits = xunitsentry.get()
2654 MathXAxis = xaxisentry.get()
2657 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry
2659 MathYString = yformentry.get()
2660 MathYUnits = yunitsentry.get()
2661 MathYAxis = yaxisentry.get()
2664 global MarkerLoc, RUNstatus
2666 TempString = MarkerLoc
2667 MarkerLoc = askstring(
"Marker Text Location",
"Current Marker Text Location: " + MarkerLoc +
"\n\nNew Location: (UL, UR, LL, LR)\n", initialvalue=MarkerLoc)
2668 if (MarkerLoc ==
None):
2669 MarkerLoc = TempString
2670 if RUNstatus.get() == 0:
2680 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2686 if RUNstatus.get() == 0:
2690 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2696 if RUNstatus.get() == 0:
2706 global TgInput, TRIGGERlevel, TRIGGERentry, RUNstatus
2707 global MaxV1, MinV1, MaxV2, MinV2
2708 global MaxI1, MinI1, MaxI2, MinI2
2709 global MidVMuxA, MidVMuxB, MidVMuxC, MidVMuxD
2710 global ChopMuxMode, ChopTrig
2712 MidV1 = (MaxV1+MinV1)/2
2713 MidV2 = (MaxV2+MinV2)/2
2714 MidI1 = (MaxI1+MinI1)/2
2715 MidI2 = (MaxI2+MinI2)/2
2716 if (TgInput.get() == 0):
2718 elif (TgInput.get() == 1
or TgInput.get() == 5):
2719 DCString =
' {0:.2f} '.format(MidV1)
2720 elif (TgInput.get() == 2 ):
2721 DCString =
' {0:.2f} '.format(MidI1)
2722 elif (TgInput.get() == 3 ):
2723 DCString =
' {0:.2f} '.format(MidV2)
2724 elif (TgInput.get() == 4 ):
2725 DCString =
' {0:.2f} '.format(MidI2)
2727 if ChopMuxMode.get() > 0:
2728 if ChopTrig.get() == 0:
2730 if ChopTrig.get() == 1:
2731 DCString =
' {0:.2f} '.format(MidVMuxA)
2732 if ChopTrig.get() == 2:
2733 DCString =
' {0:.2f} '.format(MidVMuxB)
2734 if ChopTrig.get() == 3:
2735 DCString =
' {0:.2f} '.format(MidVMuxC)
2736 if ChopTrig.get() == 4:
2737 DCString =
' {0:.2f} '.format(MidVMuxD)
2739 TRIGGERlevel = eval(DCString)
2740 TRIGGERentry.delete(0,END)
2741 TRIGGERentry.insert(4, DCString)
2742 if RUNstatus.get() == 0:
2759 global TRIGGERlevel, TRIGGERentry, RUNstatus
2763 TRIGGERlevel = float(eval(TRIGGERentry.get()))
2765 TRIGGERentry.delete(0,END)
2766 TRIGGERentry.insert(0, TRIGGERlevel)
2768 if RUNstatus.get() == 0:
2773 global HoldOff, HoldOffentry, RUNstatus
2776 HoldOff = float(eval(HoldOffentry.get()))
2778 HoldOffentry.delete(0,END)
2779 HoldOffentry.insert(0, HoldOff)
2780 if RUNstatus.get() == 0:
2784 global HozPoss, HozPossentry, RUNstatus
2787 HozPoss = float(eval(HozPossentry.get()))
2789 HozPossentry.delete(0,END)
2790 HozPossentry.insert(0, HozPoss)
2791 if RUNstatus.get() == 0:
2795 global HozPossentry, TgInput, TMsb
2799 TIMEdiv = float(eval(TMsb.get()))
2802 TMsb.delete(0,
"end")
2803 TMsb.insert(0,TIMEdiv)
2805 if TIMEdiv < 0.0002:
2807 if TgInput.get() > 0:
2808 HozPoss = -5 * TIMEdiv
2809 HozPossentry.delete(0,END)
2810 HozPossentry.insert(0, HozPoss)
2813 global HoldOffentry, HoldOff, TgInput, TMsb
2817 TIMEdiv = float(eval(TMsb.get()))
2820 TMsb.delete(0,
"end")
2821 TMsb.insert(0,TIMEdiv)
2823 if TIMEdiv < 0.0002:
2825 if TgInput.get() == 0:
2826 HoldOff = HoldOff + TIMEdiv
2827 HoldOffentry.delete(0,END)
2828 HoldOffentry.insert(0, HoldOff)
2831 global CHB_APosEntry, DCVMuxA
2833 CHB_APosEntry.delete(0,
"end")
2834 CHB_APosEntry.insert(0,
' {0:.2f} '.format(DCVMuxA))
2837 global CHB_BPosEntry, DCVMuxB
2839 CHB_BPosEntry.delete(0,
"end")
2840 CHB_BPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxB))
2843 global CHB_CPosEntry, DCVMuxC
2845 CHB_CPosEntry.delete(0,
"end")
2846 CHB_CPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxC))
2849 global CHD_BPosEntry, DCVMuxD
2851 CHB_DPosEntry.delete(0,
"end")
2852 CHB_DPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxD))
2855 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2857 if MarkerScale.get() != 1:
2859 CHB_Alab.config(style=
"Rtrace2.TButton")
2860 CHB_Blab.config(style=
"Strace6.TButton")
2861 CHB_Clab.config(style=
"Strace7.TButton")
2862 CHB_Dlab.config(style=
"Strace4.TButton")
2867 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2869 if MarkerScale.get() != 1:
2871 CHB_Alab.config(style=
"Strace2.TButton")
2872 CHB_Blab.config(style=
"Rtrace6.TButton")
2873 CHB_Clab.config(style=
"Strace7.TButton")
2874 CHB_Dlab.config(style=
"Strace4.TButton")
2879 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2881 if MarkerScale.get() != 1:
2883 CHB_Alab.config(style=
"Strace2.TButton")
2884 CHB_Blab.config(style=
"Strace6.TButton")
2885 CHB_Clab.config(style=
"Rtrace7.TButton")
2886 CHB_Dlab.config(style=
"Strace4.TButton")
2891 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2893 if MarkerScale.get() != 1:
2895 CHB_Alab.config(style=
"Strace2.TButton")
2896 CHB_Blab.config(style=
"Strace6.TButton")
2897 CHB_Clab.config(style=
"Strace7.TButton")
2898 CHB_Dlab.config(style=
"Rtrace4.TButton")
2903 global CHAVPosEntry, DCV1
2905 CHAVPosEntry.delete(0,
"end")
2906 CHAVPosEntry.insert(0,
' {0:.2f} '.format(DCV1))
2909 global CHBVPosEntry, DCV2
2911 CHBVPosEntry.delete(0,
"end")
2912 CHBVPosEntry.insert(0,
' {0:.2f} '.format(DCV2))
2915 global CHAIPosEntry, DCI1
2917 CHAIPosEntry.delete(0,
"end")
2918 CHAIPosEntry.insert(0,
' {0:.2f} '.format(DCI1))
2921 global CHBIPosEntry, DCI2
2923 CHBIPosEntry.delete(0,
"end")
2924 CHBIPosEntry.insert(0,
' {0:.2f} '.format(DCI2))
2927 global CHAVPosEntryxy, DCV1
2929 CHAVPosEntryxy.delete(0,
"end")
2930 CHAVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV1))
2933 global CHBVPosEntryxy, DCV2
2935 CHBVPosEntryxy.delete(0,
"end")
2936 CHBVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV2))
2939 global CHAIPosEntryxy, DCI1
2941 CHAIPosEntryxy.delete(0,
"end")
2942 CHAIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI1))
2945 global CHBIPosEntryxy, DCI2
2947 CHBIPosEntryxy.delete(0,
"end")
2948 CHBIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI2))
2951 global RUNstatus, session, CHA, CHB, devx, AWG_2X, Closed
2960 CHA.mode = Mode.HI_Z_SPLIT
2961 CHB.mode = Mode.HI_Z_SPLIT
2968 if session.continuous:
2977 global RUNstatus, PowerStatus, devx, PwrBt, DevID, FWRevOne, session, AWGSync
2978 global contloop, discontloop, TIMEdiv, First_Slow_sweep
2979 global TimeDisp, XYDisp, PhADisp, FreqDisp, BodeDisp, IADisp
2981 if DevID ==
"No Device":
2982 showwarning(
"WARNING",
"No Device Plugged In!")
2983 elif FWRevOne == 0.0:
2984 showwarning(
"WARNING",
"Out of data Firmware!")
2985 elif TimeDisp.get() == 0
and XYDisp.get() == 0
and PhADisp.get() == 0
and FreqDisp.get() == 0
and BodeDisp.get() == 0
and IADisp.get() == 0:
2986 showwarning(
"WARNING",
"Enable at least one Instrument!")
2988 if PowerStatus == 0:
2990 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2991 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2992 if (RUNstatus.get() == 0):
2994 if AWGSync.get() == 0:
2996 CHA.mode = Mode.HI_Z_SPLIT
2997 CHB.mode = Mode.HI_Z_SPLIT
2999 if not session.continuous:
3002 elif session.continuous:
3005 CHA.mode = Mode.HI_Z_SPLIT
3006 CHB.mode = Mode.HI_Z_SPLIT
3023 if session.continuous:
3028 First_Slow_sweep = 0
3030 First_Slow_sweep = 1
3033 global session, AWGSync
3036 if AWGSync.get() == 0:
3038 if not session.continuous:
3041 elif session.continuous:
3047 if session.continuous:
3051 global AWGAFreqEntry, AWGAFreqvalue, Two_X_Sample, FWRevOne, NetworkScreenStatus
3054 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
3056 AWGAFreqEntry.delete(0,
"end")
3057 AWGAFreqEntry.insert(0, AWGAFreqvalue)
3059 if AWGAFreqvalue > 10000.0:
3065 if NetworkScreenStatus.get() > 0:
3071 global IASource, CHA, CHB, AWGAMode, AWGBMode, AWGBIOMode, AWGSync
3073 if AWGSync.get() == 0:
3075 if IASource.get() == 1:
3076 CHA.mode = Mode.HI_Z
3077 CHB.mode = Mode.HI_Z
3080 CHA.mode = Mode.SVMI
3081 CHB.mode = Mode.HI_Z
3083 if AWGBIOMode.get() == 0:
3087 global RUNstatus, TimeDisp, XYDisp, FreqDisp, IADisp, session, AWGSync
3088 global CHA, CHB, contloop, discontloop
3090 if (RUNstatus.get() == 1):
3093 CHA.mode = Mode.HI_Z_SPLIT
3094 CHB.mode = Mode.HI_Z_SPLIT
3095 if AWGSync.get() == 0:
3100 if session.continuous:
3110 if TimeDisp.get() > 0:
3112 if XYDisp.get() > 0:
3114 if FreqDisp.get() > 0:
3116 if IADisp.get() > 0:
3120 global RUNstatus, PowerStatus, devx, PwrBt
3122 if (RUNstatus.get() == 1):
3124 if PowerStatus == 1:
3126 PwrBt.config(style=
"PwrOff.TButton",text=
"PWR-Off")
3127 devx.ctrl_transfer( 0x40, 0x50, 49, 0, 0, 0, 100)
3130 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
3131 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
3134 global Roll_Mode, RollBt
3136 if Roll_Mode.get() == 1:
3138 RollBt.config(style=
"RollOff.TButton",text=
"Roll-Off")
3141 RollBt.config(style=
"Roll.TButton",text=
"Roll-On")
3145 global TIMEdiv, TMsb, RUNstatus, Two_X_Sample, ETSDisp, FWRevOne, ChopMuxMode
3146 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, AWGSync
3149 TIMEdiv = float(eval(TMsb.get()))
3150 if TIMEdiv < 0.0002:
3152 TMsb.delete(0,
"end")
3153 TMsb.insert(0,TIMEdiv)
3156 TMsb.delete(0,
"end")
3157 TMsb.insert(0,TIMEdiv)
3160 if ETSDisp.get() == 0
and ChopMuxMode.get() == 0:
3161 Samples_per_div = TIMEdiv * 100.0
3163 if Samples_per_div < 20.0:
3164 NumTraces = ShowC1_V.get() + ShowC1_I.get() + ShowC2_V.get() + ShowC2_I.get()
3165 if NumTraces > 2
and AWGSync.get() == 0:
3166 showwarning(
"WARNING",
"You need to Select only 2 Traces or Enable AWG Sync Mode!")
3174 if RUNstatus.get() == 0:
3178 global CHAsb, RUNstatus, CH1vpdvLevel
3181 CH1vpdvLevel = float(eval(CHAsb.get()))
3184 CHAsb.insert(0, CH1vpdvLevel)
3185 if RUNstatus.get() == 0:
3189 global CHAIsb, RUNstatus, CH1ipdvLevel
3192 CH1ipdvLevel = float(eval(CHAIsb.get()))
3194 CHAIsb.delete(0,END)
3195 CHAIsb.insert(0, CH1ipdvLevel)
3196 if RUNstatus.get() == 0:
3200 global CHBsb, RUNstatus, CH2vpdvLevel
3203 CH2vpdvLevel = float(eval(CHBsb.get()))
3206 CHBsb.insert(0, CH2vpdvLevel)
3207 if RUNstatus.get() == 0:
3211 global CHBIsb, RUNstatus, CH2ipdvLevel
3214 CH2ipdvLevel = float(eval(CHBIsb.get()))
3216 CHBIsb.delete(0,END)
3217 CHBIsb.insert(0, CH2ipdvLevel)
3218 if RUNstatus.get() == 0:
3222 global CHAOffset, CHAVPosEntry, RUNstatus
3225 CHAOffset = float(eval(CHAVPosEntry.get()))
3227 CHAVPosEntry.delete(0,END)
3228 CHAVPosEntry.insert(0, CHAOffset)
3230 if RUNstatus.get() == 0:
3234 global CHAIOffset, CHAIPosEntry, RUNstatus
3237 CHAIOffset = float(eval(CHAIPosEntry.get()))
3239 CHAIPosEntry.delete(0,END)
3240 CHAIPosEntry.insert(0, CHAIOffset)
3242 if RUNstatus.get() == 0:
3246 global CHBOffset, CHBVPosEntry, RUNstatus
3249 CHBOffset = float(eval(CHBVPosEntry.get()))
3251 CHBVPosEntry.delete(0,END)
3252 CHBVPosEntry.insert(0, CHBOffset)
3254 if RUNstatus.get() == 0:
3258 global CHBIOffset, CHBIPosEntry, RUNstatus
3261 CHBIOffset = float(eval(CHBIPosEntry.get()))
3263 CHBIPosEntry.delete(0,END)
3264 CHBIPosEntry.insert(0, CHBIOffset)
3266 if RUNstatus.get() == 0:
3270 global TimeDisp, ckb1
3271 if TimeDisp.get() == 1:
3272 ckb1.config(style=
"Enab.TCheckbutton")
3274 ckb1.config(style=
"Disab.TCheckbutton")
3278 if XYDisp.get() == 1:
3279 ckb2.config(style=
"Enab.TCheckbutton")
3281 ckb2.config(style=
"Disab.TCheckbutton")
3284 global FreqDisp, ckb3, OOTckb3, OOTScreenStatus
3285 if FreqDisp.get() == 1:
3286 if OOTScreenStatus.get() == 0:
3287 ckb3.config(style=
"Enab.TCheckbutton")
3289 OOTckb3.config(style=
"Enab.TCheckbutton")
3291 if OOTScreenStatus.get() == 0:
3292 ckb3.config(style=
"Disab.TCheckbutton")
3294 OOTckb3.config(style=
"Disab.TCheckbutton")
3297 global BodeDisp, ckb5, AWGSync, OOTckb5, OOTScreenStatus
3298 if BodeDisp.get() == 1:
3300 if OOTScreenStatus.get() == 0:
3301 ckb5.config(style=
"Enab.TCheckbutton")
3303 OOTckb5.config(style=
"Enab.TCheckbutton")
3305 if OOTScreenStatus.get() == 0:
3306 ckb5.config(style=
"Disab.TCheckbutton")
3308 OOTckb5.config(style=
"Disab.TCheckbutton")
3311 global IADisp, ckb4, OOTckb4, OOTScreenStatus
3312 if IADisp.get() == 1:
3313 if OOTScreenStatus.get() == 0:
3314 ckb4.config(style=
"Enab.TCheckbutton")
3316 OOTckb4.config(style=
"Enab.TCheckbutton")
3318 if OOTScreenStatus.get() == 0:
3319 ckb4.config(style=
"Disab.TCheckbutton")
3321 OOTckb4.config(style=
"Disab.TCheckbutton")
3324 global PhADisp, Phckb, OOTphckb, OOTScreenStatus
3325 if PhADisp.get() == 1:
3326 if OOTScreenStatus.get() == 0:
3327 phckb.config(style=
"Enab.TCheckbutton")
3329 OOTphckb.config(style=
"Enab.TCheckbutton")
3331 if OOTScreenStatus.get() == 0:
3332 phckb.config(style=
"Disab.TCheckbutton")
3334 OOTphckb.config(style=
"Disab.TCheckbutton")
3337 global OhmDisp, ckb6, OOTckb6, OOTScreenStatus
3338 if OhmDisp.get() == 1:
3339 if OOTScreenStatus.get() == 0:
3340 ckb6.config(style=
"Enab.TCheckbutton")
3342 OOTckb6.config(style=
"Enab.TCheckbutton")
3344 if OOTScreenStatus.get() == 0:
3345 ckb6.config(style=
"Disab.TCheckbutton")
3347 OOTckb6.config(style=
"Disab.TCheckbutton")
3350 global ETSDisp, enb1
3351 if ETSDisp.get() == 1:
3352 enb1.config(style=
"Enab.TCheckbutton")
3355 enb1.config(style=
"Disab.TCheckbutton")
3361 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp, SpectrumScreenStatus, HWRevOne
3362 global PhADisp, IADisp, IAScreenStatus, CutDC, DevOne, AWGBMode, MuxEnb, BodeScreenStatus, BodeDisp
3363 global MuxScreenStatus, VBuffA, VBuffB, MuxSync, AWGBIOMode
3364 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD, MuxChan
3365 global ShowC1_V, ShowC2_V, ShowC2_I, SMPfft
3366 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3367 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3368 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3369 global SV1, SI1, SV2, SI2, SVA_B, Closed
3370 global FregPoint, FBins, FStep, TRACEaverage
3372 global TRACEresetTime, TRACEmodeTime, TgInput, SettingsStatus, TRIGGERsample
3373 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode, ChopMuxMode
3374 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3375 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3376 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3377 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3378 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3380 while (Closed == 0):
3382 if (RUNstatus.get() == 1)
or (RUNstatus.get() == 2):
3383 if SettingsStatus.get() == 1:
3385 if TimeDisp.get() > 0
or XYDisp.get() > 0
or PhADisp.get() > 0:
3386 if MuxScreenStatus.get() == 0:
3391 if DualMuxMode.get() == 1:
3396 if HWRevOne ==
"D" :
3399 if AWGBIOMode.get() == 0:
3401 if MuxEnb.get() == 1:
3405 if MuxSync.get() == 0:
3412 if ChopMuxMode.get() == 0:
3413 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3414 TRACEresetTime =
True
3415 if Show_CBA.get() == 1:
3417 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3418 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3419 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3420 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3422 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3423 if TRACEmodeTime.get() == 1:
3424 if TRACEresetTime ==
True:
3425 TRACEresetTime =
False
3427 VmemoryMuxA = VBuffMA
3429 if Show_CBB.get() == 1:
3431 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3432 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3433 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3434 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3436 devx.ctrl_transfer(0x40, PIO3x, 3, 0, 0, 0, 100)
3437 if TRACEmodeTime.get() == 1:
3438 if TRACEresetTime ==
True:
3439 TRACEresetTime =
False
3441 VmemoryMuxB = VBuffMB
3443 if Show_CBC.get() == 1:
3445 if DualMuxMode.get() == 1:
3446 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3447 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3449 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3450 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3451 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3452 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3454 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3455 if TRACEmodeTime.get() == 1:
3456 if TRACEresetTime ==
True:
3457 TRACEresetTime =
False
3459 VmemoryMuxC = VBuffMC
3461 if Show_CBD.get() == 1:
3463 if DualMuxMode.get() == 1:
3464 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3465 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3467 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3468 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3469 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3470 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3472 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3473 if TRACEmodeTime.get() == 1:
3474 if TRACEresetTime ==
True:
3475 TRACEresetTime =
False
3477 VmemoryMuxD = VBuffMD
3479 if Show_CBA.get() == 0
and Show_CBB.get() == 0
and Show_CBC.get() == 0
and Show_CBD.get() == 0
and ShowC1_V.get() == 1:
3483 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3484 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3485 TRACEresetTime =
True
3486 elif TRACEmodeTime.get() == 1:
3487 if TRACEresetTime ==
True:
3488 TRACEresetTime =
False
3490 VmemoryMuxA = VBuffMA
3491 VmemoryMuxB = VBuffMB
3492 VmemoryMuxC = VBuffMC
3493 VmemoryMuxD = VBuffMD
3495 if (FreqDisp.get() > 0
and SpectrumScreenStatus.get() == 1)
or (IADisp.get() > 0
and IAScreenStatus.get() == 1)
or (BodeDisp.get() > 0
and BodeScreenStatus.get() == 1):
3496 if IADisp.get() > 0
or BodeDisp.get() > 0:
3499 if BodeDisp.get() > 0:
3500 if LoopNum.get() <= len(FStep):
3501 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
3502 if FregPoint <= 5.0:
3504 elif FregPoint <= 10.0:
3506 elif FregPoint < 100.0:
3508 elif FregPoint < 500.0:
3510 elif FregPoint < 2000.0:
3514 if Two_X_Sample.get() > 0
and FregPoint < 2000.0:
3518 elif OhmRunStatus.get() == 1
and OhmDisp.get() == 1:
3520 root.update_idletasks()
3524 global RMode, CHATestVEntry, CHATestREntry, CHA, CHB, devx, OhmA0, OhmA1, discontloop
3525 global AWGAMode, AWGBMode, AWGAShape, AWGSync, AWGBTerm, AWGAOffsetEntry
3526 global AWGAIOMode, AWGBIOMode, Two_X_Sample
3530 InOffA = float(eval(CHAVOffsetEntry.get()))
3532 CHAVOffsetEntry.delete(0,END)
3533 CHAVOffsetEntry.insert(0, InOffA)
3535 InGainA = float(eval(CHAVGainEntry.get()))
3537 CHAVGainEntry.delete(0,END)
3538 CHAVGainEntry.insert(0, InGainA)
3540 InOffB = float(eval(CHBVOffsetEntry.get()))
3542 CHBVOffsetEntry.delete(0,END)
3543 CHBVOffsetEntry.insert(0, InOffB)
3545 InGainB = float(eval(CHBVGainEntry.get()))
3547 CHBVGainEntry.delete(0,END)
3548 CHBVGainEntry.insert(0, InGainB)
3550 CurOffA = float(CHAIOffsetEntry.get())
3554 CurOffB = float(CHBIOffsetEntry.get())
3558 CurGainA = float(CHAIGainEntry.get())
3562 CurGainB = float(CHBIGainEntry.get())
3566 chatestv = float(eval(CHATestVEntry.get()))
3569 CHATestVEntry.delete(0,END)
3570 CHATestVEntry.insert(0, chatestv)
3572 CHATestVEntry.delete(0,END)
3573 CHATestVEntry.insert(0, chatestv)
3575 chatestr = float(eval(CHATestREntry.get()))
3577 CHATestREntry.delete(0,END)
3578 CHATestREntry.insert(0, chatestr)
3580 DCVA0 = DCVB0 = DCIA0 = DCIB0 = 0.0
3590 AWGAOffsetEntry.delete(0,
"end")
3591 AWGAOffsetEntry.insert(0, chatestv)
3595 if RMode.get() == 0:
3600 if AWGSync.get() > 0:
3607 ADsignal1 = devx.get_samples(210)
3610 if session.continuous:
3611 ADsignal1 = devx.read(210, -1,
True)
3614 for index
in range(200):
3615 DCVA0 += ADsignal1[index+10][0][0]
3616 DCVB0 += ADsignal1[index+10][1][0]
3617 DCIA0 += ADsignal1[index+10][0][1]
3618 DCIB0 += ADsignal1[index+10][1][1]
3620 DCVA0 = DCVA0 / 200.0
3621 DCVB0 = DCVB0 / 200.0
3622 DCIA0 = DCIA0 / 200.0
3623 DCIB0 = DCIB0 / 200.0
3624 DCVA0 = (DCVA0 - InOffA) * InGainA
3625 DCVB0 = (DCVB0 - InOffB) * InGainB
3626 DCIA0 = ((DCIA0*1000) - CurOffA) * CurGainA
3627 DCIB0 = ((DCIB0*1000) - CurOffB) * CurGainB
3628 if RMode.get() == 0:
3629 DCM = chatestr * (DCVB0/(DCVA0-DCVB0))
3630 DCR = (DCM * RIN) / (RIN - DCM)
3632 DCR = chatestr * ((DCVA0-DCVB0)/DCVB0)
3634 OhmString =
'{0:.2f} '.format(DCR) +
"Ohms "
3636 OhmString =
'{0:.3f} '.format(DCR/1000) +
"KOhms "
3637 IAString =
"Meas " +
' {0:.2f} '.format(DCIA0) +
" mA " +
' {0:.2f} '.format(DCVB0) +
" V"
3638 OhmA0.config(text = OhmString)
3639 OhmA1.config(text = IAString)
3642 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
3646 global TIMEdiv, TMsb, TRACEmodeTime, TRACEresetTime, TRACEaverage
3647 global VBuffMA, VmemoryMuxA, VBuffMB, VmemoryMuxB, VBuffMC, VmemoryMuxC, VBuffMD, VmemoryMuxD
3648 global CHAVOffsetEntry, CHAVGainEntry, CHBVOffsetEntry, CHBVGainEntry
3649 global CHAIOffsetEntry, CHBIOffsetEntry, CHAIGainEntry, CHBIGainEntry
3650 global InOffA, InGainA, InOffB, InGainB
3651 global CurOffA, CurOffB, CurGainA, CurGainB
3652 global PhADisp, PhAScreenStatus, MuxScreenStatus, ChopMuxMode
3653 global First_Slow_sweep, Roll_Mode
3654 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3658 TIMEdiv = eval(TMsb.get())
3661 TMsb.delete(0,
"end")
3662 TMsb.insert(0,TIMEdiv)
3663 if TIMEdiv < 0.0002:
3668 InOffA = float(eval(CHAVOffsetEntry.get()))
3670 CHAVOffsetEntry.delete(0,END)
3671 CHAVOffsetEntry.insert(0, InOffA)
3673 InGainA = float(eval(CHAVGainEntry.get()))
3675 CHAVGainEntry.delete(0,END)
3676 CHAVGainEntry.insert(0, InGainA)
3678 InOffB = float(eval(CHBVOffsetEntry.get()))
3680 CHBVOffsetEntry.delete(0,END)
3681 CHBVOffsetEntry.insert(0, InOffB)
3683 InGainB = float(eval(CHBVGainEntry.get()))
3685 CHBVGainEntry.delete(0,END)
3686 CHBVGainEntry.insert(0, InGainB)
3688 CurOffA = float(CHAIOffsetEntry.get())
3692 CurOffB = float(CHBIOffsetEntry.get())
3696 CurGainA = float(CHAIGainEntry.get())
3700 CurGainB = float(CHBIGainEntry.get())
3704 if Roll_Mode.get() > 0:
3707 First_Slow_sweep = 0
3710 if PhADisp.get() > 0
and PhAScreenStatus.get() == 1:
3715 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB
3716 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
3717 global VAresult, VBresult, IAresult, IBresult, VABresult
3718 global PhaseVA, PhaseVB, PhaseIA, PhaseIB, PhaseVAB
3719 global VMAresult, VMBresult,VMCresult, VMDresult
3720 global PhaseVMA, PhaseVMB, PhaseVMC, PhaseVMD
3721 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3722 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3723 global DCVMuxA, DCVMuxB, DCVMuxC, DCVMuxD
3724 global SHOWsamples, SMPfft, hldn, MuxScreenStatus, MuxChan, ChopMuxMode
3725 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
3726 global FFTwindowshape, ZEROstuffing
3728 if len(VBuffA) < SMPfft:
3735 StopSmp = hldn + SMPfft
3743 REX = numpy.array(VBuffA[StartSmp:StopSmp]-DCV1)
3749 REX = REX * FFTwindowshape[0:len(REX)]
3751 ALL = numpy.fft.fft(REX, n=SMPfft)
3752 PhaseVA = numpy.angle(ALL, deg=
True)
3753 ALL = numpy.absolute(ALL)
3755 le = int(len(ALL) / 2)
3757 PhaseVA = PhaseVA[0:le]
3758 Totalcorr = 7.07106 / SMPfft
3759 VAresult = Totalcorr * ALL
3761 if MuxScreenStatus.get() == 0:
3765 REX = numpy.array(VBuffB[StartSmp:StopSmp]-DCV2)
3771 REX = REX * FFTwindowshape[0:len(REX)]
3774 ALL = numpy.fft.fft(REX, n=SMPfft)
3775 PhaseVB = numpy.angle(ALL, deg=
True)
3776 ALL = numpy.absolute(ALL)
3778 le = int(len(ALL) / 2)
3780 PhaseVB = PhaseVB[0:le]
3781 RMScorr = 7.07106 / SMPfft
3782 VBresult = RMScorr * ALL
3785 REX = numpy.array(VBuffA[StartSmp:StopSmp]-VBuffB[StartSmp:StopSmp])
3786 REX = REX - (DCV1-DCV2)
3791 REX = REX * FFTwindowshape[0:len(REX)]
3794 ALL = numpy.fft.fft(REX, n=SMPfft)
3795 PhaseVAB = numpy.angle(ALL, deg=
True)
3796 ALL = numpy.absolute(ALL)
3798 le = int(len(ALL) / 2)
3800 PhaseVAB = PhaseVAB[0:le]
3801 RMScorr = 7.07106 / SMPfft
3802 VABresult = RMScorr * ALL
3804 if MuxChan == 0
or ChopMuxMode.get() > 0:
3807 REX = numpy.array(VBuffMA[StartSmp:StopSmp]-DCVMuxA)
3813 REX = REX * FFTwindowshape[0:len(REX)]
3816 ALL = numpy.fft.fft(REX, n=SMPfft)
3817 PhaseVMA = numpy.angle(ALL, deg=
True)
3818 ALL = numpy.absolute(ALL)
3820 le = int(len(ALL) / 2)
3822 PhaseVMA = PhaseVMA[0:le]
3823 RMScorr = 7.07106 / SMPfft
3824 VMAresult = RMScorr * ALL
3825 if MuxChan == 1
or ChopMuxMode.get() > 0:
3828 REX = numpy.array(VBuffMB[StartSmp:StopSmp]-DCVMuxB)
3834 REX = REX * FFTwindowshape[0:len(REX)]
3837 ALL = numpy.fft.fft(REX, n=SMPfft)
3838 PhaseVMB = numpy.angle(ALL, deg=
True)
3839 ALL = numpy.absolute(ALL)
3841 le = int(len(ALL) / 2)
3843 PhaseVMB = PhaseVMB[0:le]
3844 RMScorr = 7.07106 / SMPfft
3845 VMBresult = RMScorr * ALL
3846 if MuxChan == 2
or ChopMuxMode.get() > 0:
3849 REX = numpy.array(VBuffMC[StartSmp:StopSmp]-DCVMuxC)
3855 REX = REX * FFTwindowshape[0:len(REX)]
3858 ALL = numpy.fft.fft(REX, n=SMPfft)
3859 PhaseVMC = numpy.angle(ALL, deg=
True)
3860 ALL = numpy.absolute(ALL)
3862 le = int(len(ALL) / 2)
3864 PhaseVMC = PhaseVMC[0:le]
3865 RMScorr = 7.07106 / SMPfft
3866 VMCresult = RMScorr * ALL
3867 if MuxChan == 3
or ChopMuxMode.get() > 0:
3870 REX = numpy.array(VBuffMD[StartSmp:StopSmp]-DCVMuxD)
3876 REX = REX * FFTwindowshape[0:len(REX)]
3879 ALL = numpy.fft.fft(REX, n=SMPfft)
3880 PhaseVMD = numpy.angle(ALL, deg=
True)
3881 ALL = numpy.absolute(ALL)
3883 le = int(len(ALL) / 2)
3885 PhaseVMD = PhaseVMD[0:le]
3886 RMScorr = 7.07106 / SMPfft
3887 VMDresult = RMScorr * ALL
3889 REX = numpy.array(IBuffA[StartSmp:StopSmp])
3895 REX = REX * FFTwindowshape[0:len(REX)]
3898 ALL = numpy.fft.fft(REX, n=SMPfft)
3899 PhaseIA = numpy.angle(ALL, deg=
True)
3900 ALL = numpy.absolute(ALL)
3902 le = int(len(ALL) / 2)
3904 PhaseIA = PhaseIA[0:le]
3905 RMScorr = 0.707106 / SMPfft
3906 IAresult = RMScorr * ALL
3909 REX = numpy.array(IBuffB[StartSmp:StopSmp])
3915 REX = REX * FFTwindowshape[0:len(REX)]
3918 ALL = numpy.fft.fft(REX, n=SMPfft)
3919 PhaseIB = numpy.angle(ALL, deg=
True)
3920 ALL = numpy.absolute(ALL)
3922 le = int(len(ALL) / 2)
3924 PhaseIB = PhaseIB[0:le]
3925 RMScorr = 0.707106 / SMPfft
3926 IBresult = RMScorr * ALL
3932 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3933 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3934 global DBuff0, DBuff1, DBuff2, DBuff3, D0, D1, D2, D3
3935 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3936 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3937 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3938 global CHA, CHB, session, devx, discontloop, contloop
3939 global TRACES, TRACESread, TRACEsize, First_Slow_sweep, Roll_Mode
3940 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3941 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, GRW
3942 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
3943 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3944 global SCREENrefresh, DCrefresh
3945 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3946 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3947 global SV1, SI1, SV2, SI2, SVA_B
3948 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3949 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3950 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3951 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3952 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3953 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3954 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3955 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3956 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3957 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3958 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3959 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3960 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3961 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3962 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3963 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3964 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3965 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3966 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3967 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3968 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3971 DCVA0 = DCVB0 = DCIA0 = DCIB0= 0.0
3974 if First_Slow_sweep == 0:
3975 VBuffA = numpy.ones(GRW)
3976 VBuffB = numpy.ones(GRW)
3977 IBuffA = numpy.ones(GRW)
3978 IBuffB = numpy.ones(GRW)
3979 DBuff0 = numpy.ones(GRW)
3980 DBuff1 = numpy.ones(GRW)
3981 DBuff2 = numpy.ones(GRW)
3982 DBuff3 = numpy.ones(GRW)
3983 First_Slow_sweep = 1
3984 if len(VBuffA) != GRW:
3985 VBuffA = numpy.ones(GRW)
3986 VBuffB = numpy.ones(GRW)
3987 IBuffA = numpy.ones(GRW)
3988 IBuffB = numpy.ones(GRW)
3989 DBuff0 = numpy.ones(GRW)
3990 DBuff1 = numpy.ones(GRW)
3991 DBuff2 = numpy.ones(GRW)
3992 DBuff3 = numpy.ones(GRW)
3994 if AWGScreenStatus.get() == 1:
3995 if AWGSync.get() > 0:
4001 ADsignal1 = devx.get_samples(NumSamples)
4003 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4004 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4005 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4006 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4009 if session.continuous:
4010 if MuxScreenStatus.get() > 0:
4011 devx.flush(-1,
True)
4012 DummySamples = NumSamples*2
4013 if DummySamples < 10000:
4014 DummySamples = 10000
4015 ADsignal1 = devx.read(DummySamples, -1,
True)
4016 ADsignal1 = devx.read(NumSamples, -1,
True)
4019 ADsignal1 = devx.get_samples(NumSamples)
4026 for index
in range(NumSamples):
4027 DCVA0 += ADsignal1[index][0][0]
4028 DCVB0 += ADsignal1[index][1][0]
4029 DCIA0 += ADsignal1[index][0][1]
4030 DCIB0 += ADsignal1[index][1][1]
4031 DCVA0 = DCVA0/(NumSamples)
4032 DCVB0 = DCVB0/(NumSamples)
4033 DCIA0 = DCIA0/(NumSamples)
4034 DCIB0 = DCIB0/(NumSamples)
4037 DCVA0 = (DCVA0 - InOffA) * InGainA
4038 DCVB0 = (DCVB0 - InOffB) * InGainB
4039 DCIA0 = (DCIA0 - CurOffA) * CurGainA
4040 DCIB0 = (DCIB0 - CurOffB) * CurGainB
4041 DCIA0 = DCIA0 * 1000
4042 DCIB0 = DCIB0 * 1000
4063 DBuff0 =
shift_buffer(DBuff0, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100))
4065 DBuff1 =
shift_buffer(DBuff1, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100))
4067 DBuff2 =
shift_buffer(DBuff2, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100))
4069 DBuff3 =
shift_buffer(DBuff3, -1, devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100))
4071 DCV1 = numpy.mean(VBuffA)
4072 DCV2 = numpy.mean(VBuffB)
4073 DCI1 = numpy.mean(IBuffA)
4074 DCI2 = numpy.mean(IBuffB)
4076 MinV1 = numpy.amin(VBuffA)
4077 MaxV1 = numpy.amax(VBuffA)
4078 MinV2 = numpy.amin(VBuffB)
4079 MaxV2 = numpy.amax(VBuffB)
4080 MinI1 = numpy.amin(IBuffA)
4081 MaxI1 = numpy.amax(IBuffA)
4082 MinI2 = numpy.amin(IBuffB)
4083 MaxI2 = numpy.amax(IBuffB)
4085 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA)))
4086 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA)))
4087 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB)))
4088 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB)))
4089 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA-VBuffB)))
4091 if TimeDisp.get() > 0:
4094 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4096 if MeasureStatus.get() > 0:
4101 global ADsignal1, VBuffMA, VBuffMB, VBuffMC, VBuffMD
4102 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
4103 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
4104 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
4105 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
4106 global SHOWsamples, ChopModeFilter
4113 while index < SHOWsamples-3:
4116 VBuffMA.append(ADsignal1[index+3][0][0])
4117 VBuffMB.append(ADsignal1[index+1][0][0])
4118 VBuffMC.append(ADsignal1[index+3][1][0])
4119 VBuffMD.append(ADsignal1[index+1][1][0])
4120 pointer = pointer + 1
4122 VBuffMA = numpy.array(VBuffMA)
4123 VBuffMB = numpy.array(VBuffMB)
4124 VBuffMC = numpy.array(VBuffMC)
4125 VBuffMD = numpy.array(VBuffMD)
4127 VBuffMA = numpy.pad(VBuffMA, (4, 0),
"edge")
4128 VBuffMA = numpy.convolve(VBuffMA, ChopModeFilter )
4129 VBuffMA = numpy.roll(VBuffMA, -4)
4130 VBuffMB = numpy.pad(VBuffMB, (4, 0),
"edge")
4131 VBuffMB = numpy.convolve(VBuffMB, ChopModeFilter)
4132 VBuffMB = numpy.roll(VBuffMB, -6)
4133 VBuffMC = numpy.pad(VBuffMC, (4, 0),
"edge")
4134 VBuffMC = numpy.convolve(VBuffMC, ChopModeFilter )
4135 VBuffMC = numpy.roll(VBuffMC, -4)
4136 VBuffMD = numpy.pad(VBuffMD, (4, 0),
"edge")
4137 VBuffMD = numpy.convolve(VBuffMD, ChopModeFilter )
4138 VBuffMD = numpy.roll(VBuffMD, -6)
4140 EndSample = SHOWsamples-4
4141 DCVMuxA = numpy.mean(VBuffMA[:EndSample])
4142 MinVMuxA = numpy.amin(VBuffMA[:EndSample])
4143 MaxVMuxA = numpy.amax(VBuffMA[:EndSample])
4144 MidVMuxA = (MaxVMuxA+MinVMuxA)/2.0
4145 PPVMuxA = MaxVMuxA-MinVMuxA
4147 DCVMuxB = numpy.mean(VBuffMB[:EndSample])
4148 MinVMuxB = numpy.amin(VBuffMB[:EndSample])
4149 MaxVMuxB = numpy.amax(VBuffMB[:EndSample])
4150 MidVMuxB = (MaxVMuxB+MinVMuxB)/2.0
4151 PPVMuxB = MaxVMuxB-MinVMuxB
4153 DCVMuxC = numpy.mean(VBuffMC[:EndSample])
4154 MinVMuxC = numpy.amin(VBuffMC[:EndSample])
4155 MaxVMuxC = numpy.amax(VBuffMC[:EndSample])
4156 MidVMuxC = (MaxVMuxC+MinVMuxC)/2.0
4157 PPVMuxC = MaxVMuxC-MinVMuxC
4159 DCVMuxD = numpy.mean(VBuffMD[:EndSample])
4160 MinVMuxD = numpy.amin(VBuffMD[:EndSample])
4161 MaxVMuxD = numpy.amax(VBuffMD[:EndSample])
4162 MidVMuxD = (MaxVMuxD+MinVMuxD)/2.0
4163 PPVMuxD = MaxVMuxD-MinVMuxD
4165 SVMuxA = numpy.sqrt(numpy.mean(numpy.square(VBuffMA[:EndSample])))
4166 SVMuxB = numpy.sqrt(numpy.mean(numpy.square(VBuffMB[:EndSample])))
4167 SVMuxC = numpy.sqrt(numpy.mean(numpy.square(VBuffMC[:EndSample])))
4168 SVMuxD = numpy.sqrt(numpy.mean(numpy.square(VBuffMD[:EndSample])))
4172 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
4173 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
4174 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
4175 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
4176 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
4177 global CHA, CHB, session, devx, discontloop, contloop, DeBugMode
4178 global TRACES, TRACESread, TRACEsize, TRIGGERsampleAltA, TRIGGERsampleAltB
4179 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
4180 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, Trigger_LPF_length, LPFTrigger
4181 global SAMPLErate, SHOWsamples, SMPfft, MinSamples, MaxSamples, AWGSAMPLErate
4182 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
4183 global SCREENrefresh, DCrefresh, ETSrecord
4184 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4185 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4186 global SV1, SI1, SV2, SI2, SVA_B
4187 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4188 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
4189 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
4190 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
4191 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
4192 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
4193 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4194 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4195 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4196 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
4197 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
4198 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
4199 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
4200 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode, ChopMuxMode, ChopTrig
4201 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
4202 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
4203 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
4204 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
4205 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
4206 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
4207 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
4208 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4209 global BCASkewEntry, BCBSkewEntry, DigDeSkewA, DigDeSkewB
4211 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
4212 TRACEresetTime =
True
4213 elif TRACEmodeTime.get() == 1:
4214 if TRACEresetTime ==
True:
4215 TRACEresetTime =
False
4223 HoldOff = float(eval(HoldOffentry.get()))
4226 HoldOffentry.delete(0,END)
4227 HoldOffentry.insert(0, HoldOff)
4229 HoldOffentry.delete(0,END)
4230 HoldOffentry.insert(0, HoldOff)
4233 HozPoss = float(eval(HozPossentry.get()))
4235 HozPossentry.delete(0,END)
4236 HozPossentry.insert(0, HozPoss)
4238 hldn = int(HoldOff * SAMPLErate/1000 )
4239 hozpos = int(HozPoss * SAMPLErate/1000 )
4242 twoscreens = int(SAMPLErate * 20.0 * TIMEdiv / 1000.0)
4243 onescreen = int(twoscreens/2)
4244 if hldn+hozpos > MaxSamples-twoscreens:
4245 hldn = MaxSamples-twoscreens-hozpos
4246 HoldOffentry.delete(0,END)
4247 HoldOffentry.insert(0, hldn*1000/SAMPLErate)
4248 if ETSDisp.get() > 0:
4250 MaxETSrecord = int(AWGSAMPLErate * 10 * TIMEdiv / 1000.0)
4252 MaxETSrecord = int(AWGSAMPLErate * 20 * TIMEdiv / 1000.0)
4253 if (MaxETSrecord*100) > MaxSamples:
4254 MaxETSrecord = MaxSamples / 100
4256 DivX = float(eval(DivXEntry.get()))
4261 DivXEntry.delete(0,END)
4262 DivXEntry.insert(0, DivX)
4264 DivXEntry.delete(0,END)
4265 DivXEntry.insert(0, DivX)
4267 MulX = (DivX*SAMPLErate)/(100*FOff)
4268 while MulX > MaxETSrecord:
4270 MulX = (DivX*SAMPLErate)/(100*FOff)
4273 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
4274 MulXEntry.config(text = SRstring)
4275 SRstring =
"Offset = " + str(FOff) +
" samples"
4276 FOffEntry.config(text = SRstring)
4277 SHOWsamples = int(MulX * 100)
4279 SHOWsamples = twoscreens + hldn + hozpos
4280 if SHOWsamples > MaxSamples:
4281 SHOWsamples = MaxSamples
4282 if SHOWsamples < MinSamples:
4283 SHOWsamples = MinSamples
4284 if PhAScreenStatus.get() > 0:
4285 if SHOWsamples < SMPfft:
4286 SHOWsamples = SMPfft + hldn + hozpos
4288 TRIGGERsample = hldn
4290 TRIGGERsample = abs(hozpos)
4291 TRIGGERsample = TRIGGERsample + hozpos
4293 if AWGScreenStatus.get() == 1:
4294 if AWGSync.get() > 0:
4301 ADsignal1 = devx.get_samples(SHOWsamples)
4303 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4304 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4305 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4306 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4308 if session.continuous:
4309 if MuxScreenStatus.get() > 0:
4310 devx.flush(-1,
True)
4311 DummySamples = SHOWsamples*2
4312 if DummySamples < 20000:
4313 DummySamples = 20000
4314 ADsignal1 = devx.read(DummySamples, -1,
True)
4315 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4318 ADsignal1 = devx.get_samples(SHOWsamples)
4320 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4321 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4322 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4323 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4325 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
4326 if ADC_Mux_Mode.get() == 0:
4329 elif ADC_Mux_Mode.get() == 1:
4332 elif ADC_Mux_Mode.get() == 4:
4335 elif ADC_Mux_Mode.get() == 5:
4345 if SHOWsamples >= 20000
and DecimateOption.get() > 0:
4347 SAMPLErate = int(AWGSAMPLErate/increment)
4348 if SHOWsamples >= 40000
and DecimateOption.get() > 0:
4350 SAMPLErate = int(AWGSAMPLErate/increment)
4352 if SHOWsamples != len(ADsignal1):
4353 SHOWsamples = len(ADsignal1)
4355 if ChopMuxMode.get() > 0
and MuxScreenStatus.get() > 0:
4358 while index < SHOWsamples:
4359 if Two_X_Sample.get() == 1
and ADC_Mux_Mode.get() < 6:
4360 if ADC_Mux_Mode.get() == 0:
4361 VBuffA.append(ADsignal1[index][0][0])
4362 VBuffA.append(ADsignal1[index][1][1])
4363 VBuffB.append(ADsignal1[index][0][1])
4364 VBuffB.append(ADsignal1[index][1][0])
4365 if Alternate_Sweep_Mode.get() == 0:
4370 elif ADC_Mux_Mode.get() == 1:
4371 IBuffA.append(ADsignal1[index][0][1])
4372 IBuffA.append(ADsignal1[index][1][0])
4373 IBuffB.append(ADsignal1[index][0][0])
4374 IBuffB.append(ADsignal1[index][1][1])
4375 if Alternate_Sweep_Mode.get() == 0:
4380 elif ADC_Mux_Mode.get() == 2:
4381 VBuffA.append((ADsignal1[index][0][1])/1024.0)
4382 VBuffA.append((ADsignal1[index][1][0])/1024.0)
4384 IBuffB.append( ((ADsignal1[index][0][0])/4096.0)-0.5 )
4385 IBuffB.append( ((ADsignal1[index][1][1])/4096.0)-0.5 )
4387 if Alternate_Sweep_Mode.get() == 0:
4392 elif ADC_Mux_Mode.get() == 3:
4393 VBuffB.append((ADsignal1[index][0][0])/1024.0)
4394 VBuffB.append((ADsignal1[index][1][1])/1024.0)
4396 IBuffA.append( ((ADsignal1[index][0][1])/4096.0)-0.5 )
4397 IBuffA.append( ((ADsignal1[index][1][0])/4096.0)-0.5 )
4399 if Alternate_Sweep_Mode.get() == 0:
4404 elif ADC_Mux_Mode.get() == 4:
4405 VBuffA.append(ADsignal1[index][0][0])
4406 VBuffA.append(ADsignal1[index][1][1])
4407 IBuffA.append(ADsignal1[index][0][1])
4408 IBuffA.append(ADsignal1[index][1][0])
4409 if Alternate_Sweep_Mode.get() == 0:
4414 elif ADC_Mux_Mode.get() == 5:
4415 VBuffB.append(ADsignal1[index][0][1])
4416 VBuffB.append(ADsignal1[index][1][0])
4417 IBuffB.append(ADsignal1[index][0][0])
4418 IBuffB.append(ADsignal1[index][1][1])
4419 if Alternate_Sweep_Mode.get() == 0:
4425 VBuffA.append(ADsignal1[index][0][0])
4426 IBuffA.append(ADsignal1[index][0][1])
4427 VBuffB.append(ADsignal1[index][1][0])
4428 IBuffB.append(ADsignal1[index][1][1])
4429 index = index + increment
4431 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
4434 while index < SHOWsamples:
4436 index = index + increment
4439 while index < SHOWsamples:
4441 index = index + increment
4444 while index < SHOWsamples:
4446 index = index + increment
4449 while index < SHOWsamples:
4451 index = index + increment
4453 if ADC_Mux_Mode.get() == 0:
4454 VBuffA = numpy.array(VBuffA)
4455 VBuffB = numpy.array(VBuffB)
4456 VBuffA = (VBuffA - InOffA) * InGainA
4457 VBuffB = (VBuffB - InOffB) * InGainB
4459 Last_ADC_Mux_Mode = 0
4460 elif ADC_Mux_Mode.get() == 1:
4461 IBuffA = numpy.array(IBuffA) * 1000
4462 IBuffB = numpy.array(IBuffB) * 1000
4463 IBuffA = (IBuffA - CurOffA) * CurGainA
4464 IBuffB = (IBuffB - CurOffB) * CurGainB
4465 ADC_Mux_Mode.set(Last_ADC_Mux_Mode)
4466 elif ADC_Mux_Mode.get() == 4:
4467 VBuffA = numpy.array(VBuffA)
4468 IBuffA = numpy.array(IBuffA) * 1000
4469 IBuffA = (IBuffA - CurOffA) * CurGainA
4470 VBuffA = (VBuffA - InOffA) * InGainA
4472 Last_ADC_Mux_Mode = 4
4473 elif ADC_Mux_Mode.get() == 5:
4474 VBuffB = numpy.array(VBuffB)
4475 VBuffB = (VBuffB - InOffB) * InGainB
4476 IBuffB = numpy.array(IBuffB) * 1000
4477 IBuffB = (IBuffB - CurOffB) * CurGainB
4479 Last_ADC_Mux_Mode = 5
4483 VBuffA = numpy.array(VBuffA)
4484 VBuffB = numpy.array(VBuffB)
4485 IBuffA = numpy.array(IBuffA) * 1000
4486 IBuffB = numpy.array(IBuffB) * 1000
4487 VBuffA = (VBuffA - InOffA) * InGainA
4488 VBuffB = (VBuffB - InOffB) * InGainB
4489 IBuffA = (IBuffA - CurOffA) * CurGainA
4490 IBuffB = (IBuffB - CurOffB) * CurGainB
4492 SHOWsamples = len(VBuffA)
4494 if ETSDisp.get() > 0:
4495 baseFreq = SAMPLErate/DivX
4503 FMul = float(eval(FminEntry.get()))
4506 FMulXEntry.delete(0,END)
4507 FMulXEntry.insert(0, int(FMul))
4510 FMulXEntry.delete(0,END)
4511 FMulXEntry.insert(0, int(FMul))
4513 FMulXEntry.delete(0,END)
4514 FMulXEntry.insert(0, int(FMul))
4515 Fmin = baseFreq * FMul
4516 FminE = float(SAMPLErate + FOff)
4517 Samples_Cycle = SAMPLErate/FminE
4519 tot_cycles = int((MulX*100)/Samples_Cycle)
4520 tot_cycles = tot_cycles + 0.1
4521 ETSrecord = int((MulX*50)/Samples_Cycle)
4522 if tot_cycles > SHOWsamples:
4523 tot_cycles = SHOWsamples-1
4525 while index < SHOWsamples:
4526 Ipart, Dpart = divmod( index*Samples_Cycle, 1)
4527 IndexValue = int(tot_cycles * Dpart)
4528 if IndexValue > SHOWsamples:
4529 IndexValue = SHOWsamples-1
4530 if IndexValue > tot_cycles:
4531 IndexValue = tot_cycles
4532 if ETSDir.get() == 0:
4533 VAets.append(VBuffA[IndexValue])
4534 VBets.append(VBuffB[IndexValue])
4535 IAets.append(IBuffA[IndexValue])
4536 IBets.append(IBuffB[IndexValue])
4538 VAets.append(VBuffA[int(tot_cycles-IndexValue)])
4539 VBets.append(VBuffB[int(tot_cycles-IndexValue)])
4540 IAets.append(IBuffA[int(tot_cycles-IndexValue)])
4541 IBets.append(IBuffB[int(tot_cycles-IndexValue)])
4544 TimeCorrection = int(SHiftFact )
4549 VBuffA = numpy.array(VBuffA)
4550 VBuffB = numpy.array(VBuffB)
4551 IBuffA = numpy.array(IBuffA)
4552 IBuffB = numpy.array(IBuffB)
4554 TimeCorrection = int(float(eval(ETSts.get())) * TimeCorrection)
4556 TimeCorrection = SHiftFact
4557 if ETSDir.get() == 0:
4558 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4559 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4561 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4562 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4563 SHOWsamples = twoscreens + hldn + hozpos
4565 if CHA_RC_HP.get() == 1
or CHAI_RC_HP.get() == 1:
4567 TC1A = float(cha_TC1Entry.get())
4570 cha_TC1Entry.delete(0,END)
4571 cha_TC1Entry.insert(0, TC1A)
4573 TC1A = CHA_TC1.get()
4575 TC2A = float(cha_TC2Entry.get())
4578 cha_TC2Entry.delete(0,END)
4579 cha_TC2Entry.insert(0, TC2A)
4581 TC2A = CHA_TC2.get()
4584 Gain1A = float(cha_A1Entry.get())
4586 Gain1A = CHA_A1.get()
4588 Gain2A = float(cha_A2Entry.get())
4590 Gain2A = CHA_A2.get()
4595 if CHAI_RC_HP.get() == 1:
4598 if CHB_RC_HP.get() == 1
or CHBI_RC_HP.get() == 1:
4600 TC1B = float(chb_TC1Entry.get())
4603 chb_TC1Entry.delete(0, END)
4604 chb_TC1Entry.insert(0, TC1B)
4606 TC1B = CHB_TC1.get()
4608 TC2B = float(chb_TC2Entry.get())
4611 chb_TC2Entry.delete(0, END)
4612 chb_TC2Entry.insert(0, TC2B)
4614 TC2B = CHB_TC2.get()
4617 Gain1B = float(chb_A1Entry.get())
4619 Gain1B = CHB_A1.get()
4621 Gain2B = float(chb_A2Entry.get())
4623 Gain2B = CHB_A2.get()
4628 if CHBI_RC_HP.get() == 1:
4632 if DigDeSkewA.get() > 0:
4633 Shift = int(BCASkewEntry.get())
4635 VBuffA = numpy.roll(VBuffA, Shift)
4636 if DigDeSkewB.get() > 0:
4637 Shift = int(BCBSkewEntry.get())
4639 VBuffB = numpy.roll(VBuffB, Shift)
4641 if DigFiltA.get() == 1:
4642 if len(DFiltACoef) > 1:
4643 VBuffA = numpy.convolve(VBuffA, DFiltACoef)
4644 if DigFiltB.get() == 1:
4645 if len(DFiltBCoef) > 1:
4646 VBuffB = numpy.convolve(VBuffB, DFiltBCoef)
4649 if ChopMuxMode.get() > 0
and MuxScreenStatus.get() > 0:
4650 if ChopTrig.get() == 1:
4652 if ChopTrig.get() == 2:
4654 if ChopTrig.get() == 3:
4656 if ChopTrig.get() == 4:
4658 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4660 if ChopMuxMode.get() == 1
and ChopTrig.get() > 0:
4661 LShift = 0 - TRIGGERsample
4662 VBuffMA = numpy.roll(VBuffMA, LShift)
4663 VBuffMB = numpy.roll(VBuffMB, LShift)
4664 VBuffMC = numpy.roll(VBuffMC, LShift)
4665 VBuffMD = numpy.roll(VBuffMD, LShift)
4666 IBuffA = numpy.roll(IBuffA, LShift)
4667 IBuffB = numpy.roll(IBuffB, LShift)
4668 TRIGGERsample = hozpos
4669 if ChopTrig.get() == 1:
4671 if ChopTrig.get() == 2:
4673 if ChopTrig.get() == 3:
4675 if ChopTrig.get() == 4:
4678 if TgInput.get() == 1:
4680 if TgInput.get() == 2:
4682 if TgInput.get() == 3:
4684 if TgInput.get() == 4:
4686 if TgInput.get() == 5:
4688 if Is_Triggered == 0:
4690 if TgInput.get() == 6:
4692 TRIGGERsampleAltA = TRIGGERsample
4694 TRIGGERsampleAltB = TRIGGERsample
4695 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4697 if TgInput.get() > 0:
4698 LShift = 0 - TRIGGERsample
4699 if TgInput.get() == 6:
4700 LShift = 0 - TRIGGERsampleAltA
4701 VBuffA = numpy.roll(VBuffA, LShift)
4702 IBuffA = numpy.roll(IBuffA, LShift)
4703 LShift = 0 - TRIGGERsampleAltB
4704 VBuffB = numpy.roll(VBuffB, LShift)
4705 IBuffB = numpy.roll(IBuffB, LShift)
4707 VBuffA = numpy.roll(VBuffA, LShift)
4708 VBuffB = numpy.roll(VBuffB, LShift)
4709 IBuffA = numpy.roll(IBuffA, LShift)
4710 IBuffB = numpy.roll(IBuffB, LShift)
4711 TRIGGERsample = hozpos
4713 if DualMuxMode.get() == 0:
4714 VBuffA = VmemoryA + (VBuffA - VmemoryA) / TRACEaverage.get()
4715 IBuffA = ImemoryA + (IBuffA - ImemoryA) / TRACEaverage.get()
4716 if MuxScreenStatus.get() == 0:
4717 VBuffB = VmemoryB + (VBuffB - VmemoryB) / TRACEaverage.get()
4718 IBuffB = ImemoryB + (IBuffB - ImemoryB) / TRACEaverage.get()
4722 if MuxScreenStatus.get() == 0:
4726 if TgInput.get() == 1
or TgInput.get() == 5
or TgInput.get() == 6:
4728 if TgInput.get() == 2:
4730 if TgInput.get() == 3
or TgInput.get() == 5
or TgInput.get() == 6:
4732 if TgInput.get() == 4:
4735 if CHA_RC_HP.get() == 1
or CHB_RC_HP.get() == 1:
4736 Endsample = hldn+onescreen
4738 Endsample = SHOWsamples - 10
4739 if MeasGateStatus.get() == 1:
4740 if (MeasGateRight-MeasGateLeft) > 0:
4741 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
4742 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
4743 if Endsample <= hldn:
4744 Endsample = hldn + 2
4746 DCV1 = numpy.mean(VBuffA[hldn:Endsample])
4747 DCV2 = numpy.mean(VBuffB[hldn:Endsample])
4748 DCI1 = numpy.mean(IBuffA[hldn:Endsample])
4749 DCI2 = numpy.mean(IBuffB[hldn:Endsample])
4751 MinV1 = numpy.amin(VBuffA[hldn:Endsample])
4752 MaxV1 = numpy.amax(VBuffA[hldn:Endsample])
4753 MinV2 = numpy.amin(VBuffB[hldn:Endsample])
4754 MaxV2 = numpy.amax(VBuffB[hldn:Endsample])
4755 MinI1 = numpy.amin(IBuffA[hldn:Endsample])
4756 MaxI1 = numpy.amax(IBuffA[hldn:Endsample])
4757 MinI2 = numpy.amin(IBuffB[hldn:Endsample])
4758 MaxI2 = numpy.amax(IBuffB[hldn:Endsample])
4760 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample])))
4761 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA[hldn:Endsample])))
4762 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB[hldn:Endsample])))
4763 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB[hldn:Endsample])))
4764 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample]-VBuffB[hldn:Endsample])))
4766 if TgInput.get() > 0
and TRACEmodeTime.get() != 1:
4768 LShift = 0 - TRIGGERsample
4769 VBuffA = numpy.roll(VBuffA, LShift)
4770 VBuffB = numpy.roll(VBuffB, LShift)
4771 IBuffA = numpy.roll(IBuffA, LShift)
4772 IBuffB = numpy.roll(IBuffB, LShift)
4773 TRIGGERsample = hozpos
4774 if ChopMuxMode.get() == 1
and ChopTrig.get() > 0
and TRACEmodeTime.get() != 1:
4775 LShift = 0 - TRIGGERsample
4776 VBuffMA = numpy.roll(VBuffMA, LShift)
4777 VBuffMB = numpy.roll(VBuffMB, LShift)
4778 VBuffMC = numpy.roll(VBuffMC, LShift)
4779 VBuffMD = numpy.roll(VBuffMD, LShift)
4780 IBuffA = numpy.roll(IBuffA, LShift)
4781 IBuffB = numpy.roll(IBuffB, LShift)
4782 TRIGGERsample = hozpos
4783 if ChopMuxMode.get() == 1
and TRACEmodeTime.get() == 1:
4786 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
4788 VmemoryMuxA = VBuffMA
4790 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
4792 VmemoryMuxB = VBuffMB
4794 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
4796 VmemoryMuxC = VBuffMC
4798 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
4800 VmemoryMuxD = VBuffMD
4801 if MuxChan > -1
and ChopMuxMode.get() == 0:
4802 if Show_CBA.get() == 1
and MuxChan == 0:
4806 MidVMuxA = (MaxV2+MinV2)/2.0
4807 PPVMuxA = MaxV2-MinV2
4810 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4813 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
4816 VmemoryMuxA = VBuffMA
4817 if Show_CBB.get() == 1
and MuxChan == 1:
4821 MidVMuxB = (MaxV2+MinV2)/2.0
4822 PPVMuxB = MaxV2-MinV2
4825 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4828 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
4831 VmemoryMuxB = VBuffMB
4832 if Show_CBC.get() == 1
and MuxChan == 2:
4833 if DualMuxMode.get() == 1 :
4837 MidVMuxC = (MaxV1+MinV1)/2.0
4838 PPVMuxC = MaxV1-MinV1
4845 MidVMuxC = (MaxV2+MinV2)/2.0
4846 PPVMuxC = MaxV2-MinV2
4849 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4852 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
4855 VmemoryMuxC = VBuffMC
4856 if Show_CBD.get() == 1
and MuxChan == 3:
4857 if DualMuxMode.get() == 1 :
4861 MidVMuxD = (MaxV1+MinV1)/2.0
4862 PPVMuxD = MaxV1-MinV1
4869 MidVMuxD = (MaxV2+MinV2)/2.0
4870 PPVMuxD = MaxV2-MinV2
4873 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4876 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
4879 VmemoryMuxD = VBuffMD
4881 if TimeDisp.get() > 0:
4883 NumTraces = ShowC1_V.get() + ShowC1_I.get() + ShowC2_V.get() + ShowC2_I.get()
4884 if NumTraces > 2
and AWGSync.get() == 0
and Two_X_Sample.get() == 1:
4885 showwarning(
"WARNING",
"You need to Select only 2 Traces or Enable AWG Sync Mode!")
4889 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4891 if SingleShot.get() > 0
and Is_Triggered == 1:
4894 if ManualTrigger.get() == 1:
4896 if MeasureStatus.get() > 0:
4902 global DCV1, DCV2, VBuffA, VBuffB
4910 sum1 += (VBuffA[i]-DCV1)*(VBuffA[i]-DCV1)
4911 sum2 += (VBuffB[i]-DCV2)*(VBuffB[i]-DCV2)
4912 sum12 += (VBuffA[i]-DCV1)*(VBuffB[i]-DCV2)
4914 return math.acos(sum12/math.sqrt(sum1*sum2))*180.0/numpy.pi
4924 global SAMPLErate, Two_X_Sample
4928 if Two_X_Sample.get() == 0:
4929 Delta = 1.0/SAMPLErate
4931 Delta = 0.88/SAMPLErate
4933 Alpha = TC / (TC + Delta)
4937 OutBuff.append( Alpha * (OutBuff[i-1] + InBuff[i] - InBuff[i-1]) )
4939 OutBuff = numpy.array(OutBuff)
4940 OutBuff = InBuff + (OutBuff * Gain)
4949 Delta = 1.0/SAMPLErate
4951 Alpha = Delta / (TC + Delta)
4953 OutBuff.append(Alpha*InBuff[0])
4955 OutBuff.append( OutBuff[i-1] + (Alpha * (InBuff[i] - InBuff[i-1])) )
4957 OutBuff = numpy.array(OutBuff)
4958 OutBuff = (OutBuff * Gain)
4965 result = numpy.empty_like(arr)
4967 result[:num] = fill_value
4968 result[num:] = arr[:-num]
4970 result[num:] = fill_value
4971 result[:num] = arr[-num:]
4979 global ADsignal1, FFTBuffA, FFTBuffB, SMPfft
4980 global AWGSync, AWGAMode, AWGBMode, AWGAShape, AWGAIOMode, AWGBIOMode
4981 global AWGAFreqvalue, AWGBFreqvalue, FStepSync, FSweepSync
4982 global NSteps, LoopNum, FSweepMode, FStep, FBins
4983 global StartFreqEntry, StopFreqEntry, HoldOffentry
4984 global session, CHA, CHB, devx, MaxSamples, discontloop
4985 global RUNstatus, SingleShotSA, FSweepCont, Two_X_Sample, ADC_Mux_Mode
4986 global AWGSAMPLErate, IAScreenStatus, SpectrumScreenStatus, BodeScreenStatus
4987 global NiCScreenStatus, NiCDisp, NqPScreenStatus, NqPDisp
4988 global OverRangeFlagA, OverRangeFlagB, BodeDisp, FreqDisp, IADisp
4989 global DCA, DCB, InOffA, InGainA, InOffB, InGainB
4990 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4991 global DigFiltA, DFiltACoef, DigFiltB, DFiltBCoef
4992 global BDSweepFile, FileSweepFreq, FileSweepAmpl
4993 global PIO_0, PIO_1, PIO_2, PIO_3
4994 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
4995 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4996 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4997 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4998 global Reset_Freq, AWGAFreqEntry, AWGBFreqEntry, MinigenFout, IASource, IA_Ext_Conf
5000 HalfSAMPLErate = SAMPLErate/2
5003 InOffA = float(eval(CHAVOffsetEntry.get()))
5005 CHAVOffsetEntry.delete(0,END)
5006 CHAVOffsetEntry.insert(0, InOffA)
5008 InGainA = float(eval(CHAVGainEntry.get()))
5010 CHAVGainEntry.delete(0,END)
5011 CHAVGainEntry.insert(0, InGainA)
5013 InOffB = float(eval(CHBVOffsetEntry.get()))
5015 CHBVOffsetEntry.delete(0,END)
5016 CHBVOffsetEntry.insert(0, InOffB)
5018 InGainB = float(eval(CHBVGainEntry.get()))
5020 CHBVGainEntry.delete(0,END)
5021 CHBVGainEntry.insert(0, InGainB)
5023 HoldOff = float(eval(HoldOffentry.get()))
5026 HoldOffentry.delete(0,END)
5027 HoldOffentry.insert(0, HoldOff)
5029 HoldOffentry.delete(0,END)
5030 HoldOffentry.insert(0, HoldOff)
5035 if BodeDisp.get() == 0:
5036 if AWGAShape.get() == 7
and AWGAMode.get() == 0:
5038 elif AWGAShape.get() == 8
and AWGAMode.get() == 0:
5040 elif AWGBShape.get() == 7
and AWGBMode.get() == 0:
5042 elif AWGBShape.get() == 8
and AWGBMode.get() == 0:
5044 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
5045 if BDSweepFile.get() == 0:
5046 if LoopNum.get() <= len(FStep):
5047 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
5049 FregPoint = FBins[FStep[0]]
5051 if LoopNum.get() <= len(FileSweepFreq):
5052 FreqIndex = int((FileSweepFreq[LoopNum.get()-1]*16384)/HalfSAMPLErate)
5053 FregPoint = FBins[FreqIndex]
5054 VRMSAmpl = 10**(FileSweepAmpl[LoopNum.get()-1]/20)
5056 FregPoint = FBins[FileSweepFreq[0]]
5057 VRMSAmpl = 10**(FileSweepAmpl[0]/20)
5058 VMax = 2.5 + (1.414*VRMSAmpl)
5059 VMin = 2.5 - (1.414*VRMSAmpl)
5060 if FSweepMode.get() == 1:
5061 AWGAAmplEntry.delete(0,END)
5062 AWGAAmplEntry.insert(4, VMin)
5063 AWGAOffsetEntry.delete(0,END)
5064 AWGAOffsetEntry.insert(4, VMax)
5065 if FSweepMode.get() == 2:
5066 AWGBAmplEntry.delete(0,END)
5067 AWGBAmplEntry.insert(4, VMin)
5068 AWGBOffsetEntry.delete(0,END)
5069 AWGBOffsetEntry.insert(4, VMax)
5070 if FSweepMode.get() == 1:
5071 AWGAFreqEntry.delete(0,END)
5072 AWGAFreqEntry.insert(4, FregPoint)
5074 if FSweepMode.get() == 2:
5075 AWGBFreqEntry.delete(0,END)
5076 AWGBFreqEntry.insert(4, FregPoint)
5078 if FSweepMode.get() == 3:
5079 MinigenFout.delete(0,END)
5080 MinigenFout.insert(4, FregPoint)
5082 if AWGSync.get() > 0:
5083 if IAScreenStatus.get() > 0
and IASource.get() == 0:
5084 if Two_X_Sample.get() == 1:
5091 hldn = int(HoldOff * 100 )
5092 if hldn > MaxSamples-SMPfft:
5093 hldn = MaxSamples-SMPfft
5094 HoldOffentry.delete(0,END)
5095 HoldOffentry.insert(0, hldn/100)
5098 SHOWsamples = SMPfft + hldn
5099 if BodeDisp.get() > 0:
5100 if FStepSync.get() == 1:
5101 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5102 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5103 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5104 if FStepSync.get() == 2:
5105 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5106 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5107 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5108 if LoopNum.get() == 1
and FSweepSync.get() == 1:
5109 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5110 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5111 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5112 if LoopNum.get() == 1
and FSweepSync.get() == 2:
5113 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5114 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5115 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5116 if AWGScreenStatus.get() == 1:
5117 if IAScreenStatus.get() > 0
and IASource.get() == 0:
5118 if Two_X_Sample.get() == 1:
5123 if AWGSync.get() > 0:
5130 ADsignal1 = devx.get_samples(SHOWsamples)
5134 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
5135 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
5136 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
5137 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
5139 ADsignal1 = devx.read(SHOWsamples, -1,
True)
5142 if session.continuous:
5143 ADsignal1 = devx.read(SHOWsamples, -1,
True)
5145 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
5146 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
5147 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
5148 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
5151 OverRangeFlagA = OverRangeFlagB = 0
5153 if SHOWsamples != len(ADsignal1):
5154 SHOWsamples = len(ADsignal1)
5155 while index < SHOWsamples:
5156 if Two_X_Sample.get() == 1:
5157 if ADC_Mux_Mode.get() == 0:
5158 FFTBuffA.append(ADsignal1[index][0][0])
5159 FFTBuffA.append(ADsignal1[index][1][1])
5160 FFTBuffB.append(ADsignal1[index][0][1])
5161 FFTBuffB.append(ADsignal1[index][1][0])
5163 VAdata = ADsignal1[index][0][0]
5164 FFTBuffA.append(VAdata)
5165 VBdata = ADsignal1[index][1][0]
5166 FFTBuffB.append(VBdata)
5167 if VAdata > 5.0
or VAdata < 0.0:
5170 if VBdata > 5.0
or VBdata < 0.0:
5174 FFTBuffA = numpy.array(FFTBuffA)
5175 FFTBuffB = numpy.array(FFTBuffB)
5176 FFTBuffA = (FFTBuffA - InOffA) * InGainA
5177 FFTBuffB = (FFTBuffB - InOffB) * InGainB
5178 DCA = numpy.average(FFTBuffA)
5179 DCB = numpy.average(FFTBuffB)
5180 if CutDC.get() == 1:
5181 FFTBuffA = FFTBuffA - DCA
5182 FFTBuffB = FFTBuffB - DCB
5184 if CHA_RC_HP.get() == 1:
5186 TC1A = float(cha_TC1Entry.get())
5189 cha_TC1Entry.delete(0,END)
5190 cha_TC1Entry.insert(0, TC1A)
5192 TC1A = CHA_TC1.get()
5194 TC2A = float(cha_TC2Entry.get())
5197 cha_TC2Entry.delete(0,END)
5198 cha_TC2Entry.insert(0, TC2A)
5200 TC2A = CHA_TC2.get()
5203 Gain1A = float(cha_A1Entry.get())
5205 Gain1A = CHA_A1.get()
5207 Gain2A = float(cha_A2Entry.get())
5209 Gain2A = CHA_A2.get()
5213 if CHB_RC_HP.get() == 1:
5215 TC1B = float(chb_TC1Entry.get())
5218 chb_TC1Entry.delete(0, END)
5219 chb_TC1Entry.insert(0, TC1B)
5221 TC1B = CHB_TC1.get()
5223 TC2B = float(chb_TC2Entry.get())
5226 chb_TC2Entry.delete(0, END)
5227 chb_TC2Entry.insert(0, TC2B)
5229 TC2B = CHB_TC2.get()
5232 Gain1B = float(chb_A1Entry.get())
5234 Gain1B = CHB_A1.get()
5236 Gain2B = float(chb_A2Entry.get())
5238 Gain2B = CHB_A2.get()
5243 if DigFiltA.get() == 1:
5244 FFTBuffA = numpy.convolve(FFTBuffA, DFiltACoef)
5245 if DigFiltB.get() == 1:
5246 FFTBuffB = numpy.convolve(FFTBuffB, DFiltBCoef)
5248 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
5250 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
5252 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
5254 if NqPScreenStatus.get() > 0
and NqPDisp.get() > 0:
5256 if NiCScreenStatus.get() > 0
and NiCDisp.get() > 0:
5258 if SingleShotSA.get() == 1:
5261 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
5262 LoopNum.set(LoopNum.get() + 1)
5263 if LoopNum.get() > NSteps.get():
5264 if FSweepMode.get() == 1:
5265 AWGAFreqEntry.delete(0,
"end")
5266 AWGAFreqEntry.insert(0, Reset_Freq)
5267 if FSweepMode.get() == 2:
5268 AWGBFreqEntry.delete(0,
"end")
5269 AWGBFreqEntry.insert(0, Reset_Freq)
5272 if FSweepCont.get() == 0:
5277 global VBuffA, VBuffB, IBuffA, IBuffB, HBuffA, HBuffB
5278 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
5279 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Xsignal
5280 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
5281 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
5282 global VABase, VATop, VBBase, VBTop
5284 if ShowC1_V.get() == 1
or Xsignal.get() == 6:
5285 CHAGridMax = (5 * CH1pdvRange ) + CHAOffset
5286 CHAGridMin = (-5 * CH1pdvRange ) + CHAOffset
5287 VAMid = (MinV1 + MaxV1)/2
5288 HBuffA = numpy.histogram(VBuffA, bins=5000, range=[CHAGridMin, CHAGridMax] )
5293 if HBuffA[0][b] > HBuffA[0][LowerPeak]
and HBuffA[1][b] < VAMid:
5295 VABase = HBuffA[1][b]
5296 if HBuffA[0][b] > HBuffA[0][UpperPeak]
and HBuffA[1][b] > VAMid:
5298 VATop = HBuffA[1][b]
5300 if ShowC2_V.get() == 1
or Xsignal.get() == 7:
5301 CHBGridMax = (5 * CH2pdvRange ) + CHBOffset
5302 CHBGridMin = (-5 * CH2pdvRange ) + CHBOffset
5303 VBMid = (MinV2 + MaxV2)/2
5304 HBuffB = numpy.histogram(VBuffB, bins=5000, range=[CHBGridMin, CHBGridMax] )
5309 if HBuffB[0][b] > HBuffB[0][LowerPeak]
and HBuffB[1][b] < VBMid:
5311 VBBase = HBuffB[1][b]
5312 if HBuffB[0][b] > HBuffB[0][UpperPeak]
and HBuffB[1][b] > VBMid:
5314 VBTop = HBuffB[1][b]
5318 global HistAsPercent
5320 if askyesno(
"Plot as Percent",
"Plot Histogram as Percent?", parent=xywindow):
5326 global MinV1, MaxV1, MinV2, MaxV2, HoldOff, TRIGGERsample, TgInput, LShift
5327 global ETSrecord, DISsamples
5328 global SHOWsamples, SAMPLErate, CHAperiod, CHAfreq, CHBperiod, CHBfreq
5329 global CHAHW, CHALW, CHADCy, CHBHW, CHBLW, CHBDCy, ShowC1_V, ShowC2_V
5330 global CHABphase, CHBADelayR1, CHBADelayR2, CHBADelayF
5335 hldn = int(HoldOff * SAMPLErate/1000)
5337 if TgInput.get() > 0:
5338 Trace1 = numpy.roll(Trace1, -LShift)
5339 Trace2 = numpy.roll(Trace2, -LShift)
5341 Trace1 = numpy.roll(Trace1, -hldn)
5342 Trace2 = numpy.roll(Trace2, -hldn)
5344 MidV1 = (numpy.amax(Trace1)+numpy.amin(Trace1))/2.0
5345 MidV2 = (numpy.amax(Trace2)+numpy.amin(Trace2))/2.0
5347 MidV1 = (MinV1+MaxV1)/2
5348 MidV2 = (MinV2+MaxV2)/2
5357 Arising = [i
for (i, val)
in enumerate(Trace1)
if val >= MidV1
and Trace1[i-1] < MidV1]
5358 Afalling = [i
for (i, val)
in enumerate(Trace1)
if val <= MidV1
and Trace1[i-1] > MidV1]
5359 AIrising = [i - (Trace1[i] - MidV1)/(Trace1[i] - Trace1[i-1])
for i
in Arising]
5360 AIfalling = [i - (MidV1 - Trace1[i])/(Trace1[i-1] - Trace1[i])
for i
in Afalling]
5362 CHAfreq = SAMPLErate / numpy.mean(numpy.diff(AIrising))
5363 CHAperiod = (numpy.mean(numpy.diff(AIrising)) * 1000.0) / SAMPLErate
5366 Dummy_read = Arising[0]
5369 if len(Arising) > 0
or len(Afalling) > 0:
5380 if AIfalling[0] < AIrising[0]:
5396 if AIfalling[1] < AIrising[1]:
5410 Brising = [i
for (i, val)
in enumerate(Trace2)
if val >= MidV2
and Trace2[i-1] < MidV2]
5411 Bfalling = [i
for (i, val)
in enumerate(Trace2)
if val <= MidV2
and Trace2[i-1] > MidV2]
5412 BIrising = [i - (Trace2[i] - MidV2)/(Trace2[i] - Trace2[i-1])
for i
in Brising]
5413 BIfalling = [i - (MidV2 - Trace2[i])/(Trace2[i-1] - Trace2[i])
for i
in Bfalling]
5415 CHBfreq = SAMPLErate / numpy.mean(numpy.diff(BIrising))
5416 CHBperiod = (numpy.mean(numpy.diff(BIrising)) * 1000.0) / SAMPLErate
5419 Dummy_read = Brising[0]
5422 if len(Brising) > 0
or len(Bfalling) > 0:
5433 if BIfalling[0] < BIrising[0]:
5449 if BIfalling[1] < BIrising[1]:
5456 CHAHW = float(((anf1 - anr1) * 1000.0) / SAMPLErate)
5457 CHALW = float(((anr2 - anf1) * 1000.0) / SAMPLErate)
5458 CHADCy = float(anf1 - anr1) / float(anr2 - anr1) * 100.0
5459 CHBHW = float(((bnf1 - bnr1) * 1000.0) / SAMPLErate)
5460 CHBLW = float(((bnr2 - bnf1) * 1000.0) / SAMPLErate)
5461 CHBDCy = float(bnf1 - bnr1) / float(bnr2 - bnr1) * 100.0
5464 CHBADelayR1 = float((bnr1 - anr1) * 1000.0 / SAMPLErate)
5466 CHBADelayR1 = float((bnr2 - anr1) * 1000.0 / SAMPLErate)
5467 CHBADelayR2 = float((bnr2 - anr2) * 1000.0 / SAMPLErate)
5468 CHBADelayF = float((bnf1 - anf1) * 1000.0 / SAMPLErate)
5470 CHABphase = 360.0*(float((bnr1 - anr1) * 1000.0 / SAMPLErate))/CHAperiod
5474 CHABphase = CHABphase + 360.0
5477 global DX, TRIGGERsample, TRIGGERlevel
5481 DY = TrgBuff[int(n)] - TrgBuff[int(n+1)]
5483 DX = (TRIGGERlevel - TrgBuff[int(n+1)])/DY
5488 global AutoLevel, TgInput, TRIGGERlevel, TRIGGERentry, DX, SAMPLErate, Is_Triggered
5489 global HoldOffentry, HozPossentry, TRIGGERsample, TRACEsize, HozPoss, hozpos
5490 global Trigger_LPF_length, LPFTrigger
5493 TRACEsize = SHOWsamples
5496 if LPFTrigger.get() > 0:
5498 for n
in range(Trigger_LPF_length.get()):
5499 TFiltCoef.append(float(1.0/Trigger_LPF_length.get()))
5500 TFiltCoef = numpy.array(TFiltCoef)
5501 TrgBuff = numpy.convolve(TrgBuff, TFiltCoef)
5503 if len(TrgBuff) == 0:
5506 TrgMin = numpy.amin(TrgBuff)
5510 TrgMax = numpy.amax(TrgBuff)
5515 if AutoLevel.get() == 1:
5516 TRIGGERlevel = (TrgMin + TrgMax)/2
5517 TRIGGERentry.delete(0,
"end")
5518 TRIGGERentry.insert(0,
' {0:.4f} '.format(TRIGGERlevel))
5520 TRIGGERlevel = eval(TRIGGERentry.get())
5522 TRIGGERentry.delete(0,END)
5523 TRIGGERentry.insert(0, TRIGGERlevel)
5526 HoldOff = float(eval(HoldOffentry.get()))
5529 HoldOffentry.delete(0,END)
5530 HoldOffentry.insert(0, HoldOff)
5532 HoldOffentry.delete(0,END)
5533 HoldOffentry.insert(0, HoldOff)
5536 HozPoss = float(eval(HozPossentry.get()))
5538 HozPossentry.delete(0,END)
5539 HozPossentry.insert(0, HozPoss)
5541 hldn = int(HoldOff * SAMPLErate/1000)
5542 hozpos = int(HozPoss * SAMPLErate/1000)
5544 TRIGGERsample = hldn
5546 TRIGGERsample = abs(hozpos)
5548 Nmax = int(TRACEsize / 1.5)
5551 TRIGGERlevel2 = 0.99 * TRIGGERlevel
5552 if TRIGGERlevel2 < TrgMin:
5553 TRIGGERlevel2 = TrgMin
5554 if TRIGGERlevel2 > TrgMax:
5555 TRIGGERlevel2 = TrgMax
5556 ChInput = TrgBuff[int(n)]
5558 while ( ChInput >= TRIGGERlevel2)
and n < Nmax:
5560 ChInput = TrgBuff[int(n)]
5561 while (ChInput <= TRIGGERlevel)
and n < Nmax:
5564 ChInput = TrgBuff[int(n)]
5567 DX = (TRIGGERlevel - Prev)/DY
5570 if TgEdge.get() == 1:
5571 TRIGGERlevel2 = 1.01 * TRIGGERlevel
5572 if TRIGGERlevel2 < TrgMin:
5573 TRIGGERlevel2 = TrgMin
5574 if TRIGGERlevel2 > TrgMax:
5575 TRIGGERlevel2 = TrgMax
5576 ChInput = TrgBuff[int(n)]
5578 while (ChInput <= TRIGGERlevel2)
and n < Nmax:
5580 ChInput = TrgBuff[int(n)]
5581 while (ChInput >= TRIGGERlevel)
and n < Nmax:
5584 ChInput = TrgBuff[int(n)]
5587 DX = (Prev - TRIGGERlevel)/DY
5593 TRIGGERsample = n - 1
5596 TRIGGERsample = 1 + hldn
5604 TRIGGERsample = TRIGGERsample + hozpos
5607 global win2, DigScreenStatus
5609 DigScreenStatus.set(0)
5614 global D0, D1, D2, D3, D4, D5, D6, D7
5615 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
5616 global digin0, digin1, digin2, digin3, digin4, digin5, digin6, digin7
5619 devx.ctrl_transfer( 0x40, D0.get(), PIO_0, 0, 0, 0, 100)
5620 if D0.get() == 0x50:
5621 digin0.configure(text=
"Low", background=
"#00ff00")
5623 digin0.configure(text=
"Hi", background=
"#ff0000")
5625 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5627 digin0.configure(text=
"Low", background=
"#00ff00")
5629 digin0.configure(text=
"Hi", background=
"#ff0000")
5631 devx.ctrl_transfer( 0x40, D1.get(), PIO_1, 0, 0, 0, 100)
5632 if D1.get() == 0x50:
5633 digin1.configure(text=
"Low", background=
"#00ff00")
5635 digin1.configure(text=
"Hi", background=
"#ff0000")
5637 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5639 digin1.configure(text=
"Low", background=
"#00ff00")
5641 digin1.configure(text=
"Hi", background=
"#ff0000")
5643 devx.ctrl_transfer( 0x40, D2.get(), PIO_2, 0, 0, 0, 100)
5644 if D2.get() == 0x50:
5645 digin2.configure(text=
"Low", background=
"#00ff00")
5647 digin2.configure(text=
"Hi", background=
"#ff0000")
5649 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5651 digin2.configure(text=
"Low", background=
"#00ff00")
5653 digin2.configure(text=
"Hi", background=
"#ff0000")
5655 devx.ctrl_transfer( 0x40, D3.get(), PIO_3, 0, 0, 0, 100)
5656 if D3.get() == 0x50:
5657 digin3.configure(text=
"Low", background=
"#00ff00")
5659 digin3.configure(text=
"Hi", background=
"#ff0000")
5661 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5663 digin3.configure(text=
"Low", background=
"#00ff00")
5665 digin3.configure(text=
"Hi", background=
"#ff0000")
5667 devx.ctrl_transfer( 0x40, D4.get(), PIO_4, 0, 0, 0, 100)
5668 if D4.get() == 0x50:
5669 digin4.configure(text=
"Low", background=
"#00ff00")
5671 digin4.configure(text=
"Hi", background=
"#ff0000")
5673 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5675 digin4.configure(text=
"Low", background=
"#00ff00")
5677 digin4.configure(text=
"Hi", background=
"#ff0000")
5679 devx.ctrl_transfer( 0x40, D5.get(), PIO_5, 0, 0, 0, 100)
5680 if D5.get() == 0x50:
5681 digin5.configure(text=
"Low", background=
"#00ff00")
5683 digin5.configure(text=
"Hi", background=
"#ff0000")
5685 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5687 digin5.configure(text=
"Low", background=
"#00ff00")
5689 digin5.configure(text=
"Hi", background=
"#ff0000")
5691 devx.ctrl_transfer( 0x40, D6.get(), PIO_6, 0, 0, 0, 100)
5692 if D6.get() == 0x50:
5693 digin6.configure(text=
"Low", background=
"#00ff00")
5695 digin6.configure(text=
"Hi", background=
"#ff0000")
5697 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5699 digin6.configure(text=
"Low", background=
"#00ff00")
5701 digin6.configure(text=
"Hi", background=
"#ff0000")
5703 devx.ctrl_transfer( 0x40, D7.get(), PIO_7, 0, 0, 0, 100)
5704 if D7.get() == 0x50:
5705 digin7.configure(text=
"Low", background=
"#00ff00")
5707 digin7.configure(text=
"Hi", background=
"#ff0000")
5709 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5711 digin7.configure(text=
"Low", background=
"#00ff00")
5713 digin7.configure(text=
"Hi", background=
"#ff0000")
5717 global D0, D1, D2, D3, D4, D5, D6, D7
5718 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
5719 global digin0, digin1, digin2, digin3, digin4, digin5, digin6, digin7
5720 global DigScreenStatus, DacScreenStatus, win2, MuxScreenStatus
5722 if DigScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5723 DigScreenStatus.set(1)
5725 win2.title(
"Dig Out")
5726 win2.resizable(FALSE,FALSE)
5727 win2.protocol(
"WM_DELETE_WINDOW", DestroyDigScreen)
5728 drb1 = Radiobutton(win2, text=
"D0-0", variable=D0, value=0x50, command=sel )
5729 drb1.grid(row=2, column=0, sticky=W)
5730 drb0z = Radiobutton(win2, text=
"D0-Z", variable=D0, value=0, command=sel )
5731 drb0z.grid(row=2, column=1, sticky=W)
5732 drb2 = Radiobutton(win2, text=
"D0-1", variable=D0, value=0x51, command=sel )
5733 drb2.grid(row=2, column=2, sticky=W)
5734 digin0 = Label(win2, text=
"Low", background =
"#00ff00")
5735 digin0.grid(row=2, column=3, sticky=W)
5736 drb3 = Radiobutton(win2, text=
"D1-0", variable=D1, value=0x50, command=sel )
5737 drb3.grid(row=3, column=0, sticky=W)
5738 drb3z = Radiobutton(win2, text=
"D1-Z", variable=D1, value=0, command=sel )
5739 drb3z.grid(row=3, column=1, sticky=W)
5740 drb4 = Radiobutton(win2, text=
"D1-1", variable=D1, value=0x51, command=sel )
5741 drb4.grid(row=3, column=2, sticky=W)
5742 digin1 = Label(win2, text=
"Low", background =
"#00ff00")
5743 digin1.grid(row=3, column=3, sticky=W)
5744 drb5 = Radiobutton(win2, text=
"D2-0", variable=D2, value=0x50, command=sel )
5745 drb5.grid(row=4, column=0, sticky=W)
5746 drb5z = Radiobutton(win2, text=
"D2-Z", variable=D2, value=0, command=sel )
5747 drb5z.grid(row=4, column=1, sticky=W)
5748 drb6 = Radiobutton(win2, text=
"D2-1", variable=D2, value=0x51, command=sel )
5749 drb6.grid(row=4, column=2, sticky=W)
5750 digin2 = Label(win2, text=
"Low", background =
"#00ff00")
5751 digin2.grid(row=4, column=3, sticky=W)
5752 drb7 = Radiobutton(win2, text=
"D3-0", variable=D3, value=0x50, command=sel )
5753 drb7.grid(row=5, column=0, sticky=W)
5754 drb7z = Radiobutton(win2, text=
"D3-Z", variable=D3, value=0, command=sel )
5755 drb7z.grid(row=5, column=1, sticky=W)
5756 drb8 = Radiobutton(win2, text=
"D3-1", variable=D3, value=0x51, command=sel )
5757 drb8.grid(row=5, column=2, sticky=W)
5758 digin3 = Label(win2, text=
"Low", background =
"#00ff00")
5759 digin3.grid(row=5, column=3, sticky=W)
5760 drb9 = Radiobutton(win2, text=
"D4-0", variable=D4, value=0x50, command=sel )
5761 drb9.grid(row=6, column=0, sticky=W)
5762 drb9z = Radiobutton(win2, text=
"D4-Z", variable=D4, value=0, command=sel )
5763 drb9z.grid(row=6, column=1, sticky=W)
5764 drb10 = Radiobutton(win2, text=
"D4-1", variable=D4, value=0x51, command=sel )
5765 drb10.grid(row=6, column=2, sticky=W)
5766 digin4 = Label(win2, text=
"Low", background =
"#00ff00")
5767 digin4.grid(row=6, column=3, sticky=W)
5768 drb11 = Radiobutton(win2, text=
"D5-0", variable=D5, value=0x50, command=sel )
5769 drb11.grid(row=7, column=0, sticky=W)
5770 drb11z = Radiobutton(win2, text=
"D5-Z", variable=D5, value=0, command=sel )
5771 drb11z.grid(row=7, column=1, sticky=W)
5772 drb12 = Radiobutton(win2, text=
"D5-1", variable=D5, value=0x51, command=sel )
5773 drb12.grid(row=7, column=2, sticky=W)
5774 digin5 = Label(win2, text=
"Low", background =
"#00ff00")
5775 digin5.grid(row=7, column=3, sticky=W)
5776 drb13 = Radiobutton(win2, text=
"D6-0", variable=D6, value=0x50, command=sel )
5777 drb13.grid(row=8, column=0, sticky=W)
5778 drb13z = Radiobutton(win2, text=
"D6-Z", variable=D6, value=0, command=sel )
5779 drb13z.grid(row=8, column=1, sticky=W)
5780 drb13 = Radiobutton(win2, text=
"D6-1", variable=D6, value=0x51, command=sel )
5781 drb13.grid(row=8, column=2, sticky=W)
5782 digin6 = Label(win2, text=
"Low", background =
"#00ff00")
5783 digin6.grid(row=8, column=3, sticky=W)
5784 drb14 = Radiobutton(win2, text=
"D7-0", variable=D7, value=0x50, command=sel )
5785 drb14.grid(row=9, column=0, sticky=W)
5786 drb14z = Radiobutton(win2, text=
"D7-Z", variable=D7, value=0, command=sel )
5787 drb14z.grid(row=9, column=1, sticky=W)
5788 drb15 = Radiobutton(win2, text=
"D7-1", variable=D7, value=0x51, command=sel )
5789 drb15.grid(row=9, column=2, sticky=W)
5790 digin7 = Label(win2, text=
"Low", background =
"#00ff00")
5791 digin7.grid(row=9, column=3, sticky=W)
5793 digdismissbutton = Button(win2, text=
"Dismiss", command=DestroyDigScreen)
5794 digdismissbutton.grid(row=10, column=0, sticky=W)
5797 global win1, DacScreenStatus
5799 DacScreenStatus.set(0)
5808 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5809 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5810 elif DAC0.get() == 4:
5811 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5812 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5813 elif DAC0.get() == 2:
5814 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5815 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5816 elif DAC0.get() == 3:
5817 Dval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
5818 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5819 elif DAC0.get() == 5:
5820 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5821 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5822 elif DAC0.get() == 7:
5823 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5824 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5825 elif DAC0.get() == 8:
5826 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5827 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5828 elif DAC0.get() == 6:
5829 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5830 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5831 elif DAC0.get() == 9:
5832 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5833 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5841 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5842 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5843 elif DAC1.get() == 4:
5844 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5845 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5846 elif DAC1.get() == 2:
5847 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5848 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5849 elif DAC1.get() == 3:
5850 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5851 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5852 elif DAC1.get() == 5:
5853 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5854 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5855 elif DAC1.get() == 7:
5856 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5857 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5858 elif DAC1.get() == 8:
5859 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5860 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5861 elif DAC1.get() == 6:
5862 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5863 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5864 elif DAC1.get() == 9:
5865 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5866 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5874 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5875 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5876 elif DAC2.get() == 4:
5877 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5878 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5879 elif DAC2.get() == 2:
5880 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5881 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5882 elif DAC2.get() == 3:
5883 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5884 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5885 elif DAC2.get() == 5:
5886 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5887 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5888 elif DAC2.get() == 7:
5889 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5890 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5891 elif DAC2.get() == 8:
5892 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5893 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5894 elif DAC2.get() == 6:
5895 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5896 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5897 elif DAC2.get() == 9:
5898 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5899 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5907 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5908 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5909 elif DAC3.get() == 4:
5910 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5911 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5912 elif DAC3.get() == 2:
5913 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5914 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5915 elif DAC3.get() == 3:
5916 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5917 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5918 elif DAC3.get() == 5:
5919 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5920 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5921 elif DAC3.get() == 7:
5922 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5923 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5924 elif DAC3.get() == 8:
5925 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5926 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5927 elif DAC3.get() == 6:
5928 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5929 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5930 elif DAC3.get() == 9:
5931 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5932 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5935 global DAC0, DAC1, DAC2, DAC3, SWRev, RevDate
5936 global DacScreenStatus, DigScreenStatus, win1, MuxScreenStatus
5938 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5939 DacScreenStatus.set(1)
5941 win1.title(
"DAC Out "+ SWRev + RevDate)
5942 win1.resizable(FALSE,FALSE)
5943 win1.protocol(
"WM_DELETE_WINDOW", DestroyDacScreen)
5944 DAC0 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel0, length=90)
5945 DAC0.grid(row=0, column=0, sticky=W)
5946 DAC1 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel1, length=90)
5947 DAC1.grid(row=0, column=1, sticky=W)
5948 DAC2 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel2, length=90)
5949 DAC2.grid(row=0, column=2, sticky=W)
5950 DAC3 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel3, length=90)
5951 DAC3.grid(row=0, column=3, sticky=W)
5953 dismissbutton = Button(win1, text=
"Dismiss", command=DestroyDacScreen)
5954 dismissbutton.grid(row=1, column=0, columnspan=4, sticky=W)
5987 global VBuffA, VBuffB, IBuffA, IBuffB
5988 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus, ChopMuxMode, ChopTrig
5989 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
5990 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
5991 global DBuff0, DBuff1, DBuff2, DBuff3, D0, D1, D2, D3
5992 global D0line, D1line, D2line, D3line
5993 global FFTBuffA, FFTBuffB, FFTwindowshape
5994 global AWGAwaveform, AWGBwaveform
5995 global T1Vline, T2Vline, T1Iline, T2Iline
5996 global TMAVline, TMBVline, TMCVline, TMDVline
5997 global Tmathline, TMXline, TMYline
5998 global MathString, MathAxis, MathXString, MathYString, MathXAxis, MathYAxis
5999 global Triggerline, Triggersymbol, TgInput, TgEdge, HoldOff, HoldOffentry
6000 global X0L, Y0T, GRW, GRH, MouseX, MouseY, MouseCAV, MouseCAI, MouseCBV, MouseCBI
6001 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
6002 global SHOWsamples, ZOHold, AWGBMode
6003 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
6004 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
6005 global Show_MathX, Show_MathY
6006 global TRACES, TRACESread, RUNstatus
6007 global AutoCenterA, AutoCenterB
6008 global CHAsb, CHBsb, CHAOffset, CHBOffset, CHAIsb, CHBIsb, CHAIOffset, CHBIOffset
6012 global SAMPLErate, SCstart, Two_X_Sample, DISsamples, First_Slow_sweep
6013 global TRIGGERsample, TRACEsize, DX, TRIGGERsampleAltA, TRIGGERsampleAltB
6014 global TRIGGERlevel, TRIGGERentry, AutoLevel
6015 global InOffA, InGainA, InOffB, InGainB
6016 global CurOffA, CurOffB, CurGainA, CurGainB
6017 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
6018 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
6019 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6020 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6021 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
6022 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
6023 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
6024 global HozPoss, HozPossentry
6027 if len(VBuffA) < 100
and MuxScreenStatus.get() == 0:
6029 TRACEsize = SHOWsamples
6039 if TIMEdiv < 0.0002:
6042 if AutoCenterA.get() > 0:
6044 CHAVPosEntry.delete(0,END)
6045 CHAVPosEntry.insert(0,
' {0:.2f} '.format(CHAOffset))
6046 if AutoCenterB.get() > 0:
6048 CHBVPosEntry.delete(0,END)
6049 CHBVPosEntry.insert(0,
' {0:.2f} '.format(CHBOffset))
6052 CH1pdvRange = float(eval(CHAsb.get()))
6055 CHAsb.insert(0, CH1pdvRange)
6057 CH2pdvRange = float(eval(CHBsb.get()))
6060 CHBsb.insert(0, CH2pdvRange)
6062 CH1IpdvRange = float(eval(CHAIsb.get()))
6064 CHAIsb.delete(0,END)
6065 CHAIsb.insert(0, CH1IpdvRange)
6067 CH2IpdvRange = float(eval(CHBIsb.get()))
6069 CHBIsb.delete(0,END)
6070 CHBIsb.insert(0, CH2IpdvRange)
6073 CHAOffset = float(eval(CHAVPosEntry.get()))
6075 CHAVPosEntry.delete(0,END)
6076 CHAVPosEntry.insert(0, CHAOffset)
6078 CHAIOffset = float(eval(CHAIPosEntry.get()))
6080 CHAIPosEntry.delete(0,END)
6081 CHAIPosEntry.insert(0, CHAIOffset)
6083 CHBOffset = float(eval(CHBVPosEntry.get()))
6085 CHBVPosEntry.delete(0,END)
6086 CHBVPosEntry.insert(0, CHBOffset)
6088 CHBIOffset = float(eval(CHBIPosEntry.get()))
6090 CHBIPosEntry.delete(0,END)
6091 CHBIPosEntry.insert(0, CHBIOffset)
6093 if CH1pdvRange < 0.001:
6095 if CH2pdvRange < 0.001:
6097 if CH1IpdvRange < 0.1:
6099 if CH2IpdvRange < 0.1:
6103 HoldOff = float(eval(HoldOffentry.get()))
6106 HoldOffentry.delete(0,END)
6107 HoldOffentry.insert(0, HoldOff)
6109 HoldOffentry.delete(0,END)
6110 HoldOffentry.insert(0, HoldOff)
6113 HozPoss = float(eval(HozPossentry.get()))
6115 HozPossentry.delete(0,END)
6116 HozPossentry.insert(0, HozPoss)
6118 hldn = int(HoldOff * SAMPLErate/1000 )
6119 hozpos = int(HozPoss * SAMPLErate/1000 )
6136 if TgInput.get() > 0
or ChopTrig.get() > 0:
6137 SCmin = int(-1 * TRIGGERsample)
6138 SCmax = int(TRACEsize - TRIGGERsample - 0)
6141 SCmax = TRACEsize - 1
6149 Yconv1 = float(GRH/10.0) / CH1pdvRange
6150 Yconv2 = float(GRH/10.0) / CH2pdvRange
6151 YIconv1 = float(GRH/10.0) / CH1IpdvRange
6152 YIconv2 = float(GRH/10.0) / CH2IpdvRange
6153 Xconv1 = float(GRW/10.0) / CH1pdvRange
6154 Xconv2 = float(GRW/10.0) / CH2pdvRange
6155 XIconv1 = float(GRW/10.0) / CH1IpdvRange
6156 XIconv2 = float(GRW/10.0) / CH2IpdvRange
6157 if MuxScreenStatus.get() == 1:
6159 CHMApdvRange = float(eval(CHB_Asb.get()))
6161 CHB_Asb.delete(0,END)
6162 CHB_Asb.insert(0, CHMApdvRange)
6164 CHMBpdvRange = float(eval(CHB_Bsb.get()))
6166 CHB_Bsb.delete(0,END)
6167 CHB_Bsb.insert(0, CHMBpdvRange)
6169 CHMCpdvRange = float(eval(CHB_Csb.get()))
6171 CHB_Csb.delete(0,END)
6172 CHB_Csb.insert(0, CHMCpdvRange)
6174 CHMDpdvRange = float(eval(CHB_Dsb.get()))
6176 CHB_Dsb.delete(0,END)
6177 CHB_Dsb.insert(0, CHMDpdvRange)
6178 YconvMA = float(GRH/10.0) / CHMApdvRange
6179 YconvMB = float(GRH/10.0) / CHMBpdvRange
6180 YconvMC = float(GRH/10.0) / CHMCpdvRange
6181 YconvMD = float(GRH/10.0) / CHMDpdvRange
6183 CHBAOffset = float(eval(CHB_APosEntry.get()))
6185 CHB_APosEntry.delete(0,END)
6186 CHB_APosEntry.insert(0, CHBAOffset)
6188 CHBBOffset = float(eval(CHB_BPosEntry.get()))
6190 CHB_BPosEntry.delete(0,END)
6191 CHB_BPosEntry.insert(0, CHBBOffset)
6193 CHBCOffset = float(eval(CHB_CPosEntry.get()))
6195 CHB_CPosEntry.delete(0,END)
6196 CHB_CPosEntry.insert(0, CHBCOffset)
6198 CHBDOffset = float(eval(CHB_DPosEntry.get()))
6200 CHB_DPosEntry.delete(0,END)
6201 CHB_DPosEntry.insert(0, CHBDOffset)
6202 if MathAxis ==
"V-A":
6204 CHMOffset = CHAOffset
6205 elif MathAxis ==
"V-B":
6207 CHMOffset = CHBOffset
6208 elif MathAxis ==
"I-A":
6210 CHMOffset = CHAIOffset
6211 elif MathAxis ==
"I-B":
6213 CHMOffset = CHBIOffset
6216 CHMOffset = CHAOffset
6218 if MathYAxis ==
"V-A":
6220 CHMYOffset = CHAOffset
6221 elif MathYAxis ==
"V-B":
6223 CHMYOffset = CHBOffset
6224 elif MathYAxis ==
"I-A":
6226 CHMYOffset = CHAIOffset
6227 elif MathYAxis ==
"I-B":
6229 CHMYOffset = CHBIOffset
6232 CHMYOffset = CHAOffset
6234 if MathXAxis ==
"V-A":
6236 CHMXOffset = CHAOffset
6237 elif MathXAxis ==
"V-B":
6239 CHMXOffset = CHBOffset
6240 elif MathXAxis ==
"I-A":
6242 CHMXOffset = CHAIOffset
6243 elif MathXAxis ==
"I-B":
6245 CHMXOffset = CHBIOffset
6248 CHMXOffset = CHAOffset
6250 c1 = GRH / 2.0 + Y0T
6251 c2 = GRH / 2.0 + Y0T
6253 if First_Slow_sweep == 1:
6254 TRACEsize = len(VBuffA)
6260 Dconv = float(GRH/10.0)
6262 DISsamples = SAMPLErate * 10.0 * TIMEdiv / 1000.0
6274 if len(VBuffA) < 4
and len(VBuffB) < 4
and len(IBuffA) < 4
and len(IBuffB) < 4:
6276 t = int(SCstart + TRIGGERsample)
6281 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6282 ypi1 = int(c1 - YIconv1 * (IBuffA[t] - CHAIOffset))
6283 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6284 ypi2 = int(c1 - YIconv2 * (IBuffB[t] - CHBIOffset))
6285 DvY1 = DvY2 = DiY1 = DiY2 = 0
6287 if (DISsamples <= GRW):
6288 Xstep = GRW / DISsamples
6289 if AWGBMode.get() == 2
and Two_X_Sample.get() == 0:
6290 xa = int((Xstep/-2.5) - (Xstep*DX))
6292 xa = 0 - int(Xstep*DX)
6293 x = 0 - int(Xstep*DX)
6298 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6300 ypi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
6301 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6302 if MuxScreenStatus.get() == 1:
6303 if len(VBuffMA) > 4:
6304 ypvma = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
6305 if len(VBuffMB) > 4:
6306 ypvmb = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
6307 if len(VBuffMC) > 4:
6308 ypvmc = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
6309 if len(VBuffMD) > 4:
6310 ypvmd = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
6312 ypi2 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
6313 ypm = ypmx = ypmy = GRH / 2.0 + Y0T
6314 if TgInput.get() == 0:
6322 y1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
6324 yi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
6334 if ShowC1_V.get() == 1 :
6335 if ZOHold.get() == 1:
6336 T1Vline.append(int(xa1))
6337 T1Vline.append(int(ypv1))
6338 T1Vline.append(int(xa1))
6339 T1Vline.append(int(y1))
6341 T1Vline.append(int(xa1))
6342 T1Vline.append(int(y1))
6345 if ShowC1_I.get() == 1:
6346 if ZOHold.get() == 1:
6347 T1Iline.append(int(xa1))
6348 T1Iline.append(int(ypi1))
6349 T1Iline.append(int(xa1))
6350 T1Iline.append(int(yi1))
6352 T1Iline.append(int(xa1))
6353 T1Iline.append(int(yi1))
6356 if ShowC2_V.get() == 1:
6357 y1 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
6362 if ZOHold.get() == 1:
6363 T2Vline.append(int(x1))
6364 T2Vline.append(int(ypv2))
6365 T2Vline.append(int(x1))
6366 T2Vline.append(int(y1))
6368 T2Vline.append(int(x1))
6369 T2Vline.append(int(y1))
6372 if Show_CBA.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMA)>4:
6373 y1 = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
6378 if ZOHold.get() == 1:
6379 TMAVline.append(int(x1))
6380 TMAVline.append(int(ypvma))
6381 TMAVline.append(int(x1))
6382 TMAVline.append(int(y1))
6384 TMAVline.append(int(x1))
6385 TMAVline.append(int(y1))
6387 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6388 Xfine = MouseX - X0L - x
6389 MouseMuxA = ypvma - (y1 - ypvma) * (Xfine/Xstep)
6390 if Show_CBB.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMB)>4:
6391 y1 = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
6396 if ZOHold.get() == 1:
6397 TMBVline.append(int(x1))
6398 TMBVline.append(int(ypvmb))
6399 TMBVline.append(int(x1))
6400 TMBVline.append(int(y1))
6402 TMBVline.append(int(x1))
6403 TMBVline.append(int(y1))
6405 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6406 Xfine = MouseX - X0L - x
6407 MouseMuxB = ypvmb - (y1 - ypvmb) * (Xfine/Xstep)
6408 if Show_CBC.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMC)>4:
6409 y1 = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
6414 if ZOHold.get() == 1:
6415 TMCVline.append(int(x1))
6416 TMCVline.append(int(ypvmc))
6417 TMCVline.append(int(x1))
6418 TMCVline.append(int(y1))
6420 TMCVline.append(int(x1))
6421 TMCVline.append(int(y1))
6423 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6424 Xfine = MouseX - X0L - x
6425 MouseMuxC = ypvmc - (y1 - ypvmc) * (Xfine/Xstep)
6426 if Show_CBD.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMD)>4:
6427 y1 = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
6432 if ZOHold.get() == 1:
6433 TMDVline.append(int(x1))
6434 TMDVline.append(int(ypvmd))
6435 TMDVline.append(int(x1))
6436 TMDVline.append(int(y1))
6438 TMDVline.append(int(x1))
6439 TMDVline.append(int(y1))
6441 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
6442 Xfine = MouseX - X0L - x
6443 MouseMuxD = ypvmd - (y1 - ypvmd) * (Xfine/Xstep)
6444 if ShowC2_I.get() == 1:
6446 yi1 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
6451 if (ZOHold.get() == 1):
6452 T2Iline.append(int(x1))
6453 T2Iline.append(int(ypi2))
6454 T2Iline.append(int(x1))
6455 T2Iline.append(int(yi1))
6457 T2Iline.append(int(x1))
6458 T2Iline.append(int(yi1))
6461 if MathTrace.get() > 0:
6462 if MathTrace.get() == 1:
6463 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
6465 elif MathTrace.get() == 2:
6466 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
6468 elif MathTrace.get() == 3:
6469 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
6471 elif MathTrace.get() == 4:
6472 Ypower = VBuffA[t] * IBuffA[t]
6473 ytemp = YIconv1 * (Ypower - CHAIOffset)
6474 y1 = int(c1 - ytemp)
6476 elif MathTrace.get() == 5:
6477 Ypower = VBuffB[t] * IBuffB[t]
6478 ytemp = YIconv2 * (Ypower - CHBIOffset)
6479 y1 = int(c2 - ytemp)
6481 elif MathTrace.get() == 6:
6482 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
6483 ytemp = YIconv1 * (Yohms - CHAIOffset)
6484 y1 = int(c1 - ytemp)
6486 elif MathTrace.get() == 7:
6487 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
6488 ytemp = YIconv2 * (Yohms - CHBIOffset)
6489 y1 = int(c2 - ytemp)
6491 elif MathTrace.get() == 8:
6492 Ydif = (IBuffA[t] - IBuffB[t])
6493 ytemp = YIconv1 * (Ydif - CHAIOffset)
6494 y1 = int(c2 - ytemp)
6496 elif MathTrace.get() == 9:
6497 Ydif = (IBuffB[t] - IBuffA[t])
6498 ytemp = YIconv2 * (Ydif - CHBIOffset)
6499 y1 = int(c2 - ytemp)
6501 elif MathTrace.get() == 10:
6503 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6505 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6507 elif MathTrace.get() == 11:
6509 Y1 = (IBuffB[t] / IBuffA[t])
6511 Y1 = (IBuffB[t] / 0.000001)
6512 ytemp = YIconv2 * (Y1 - CHBIOffset)
6513 y1 = int(c2 - ytemp)
6515 elif MathTrace.get() == 12:
6518 MathResult = eval(MathString)
6519 MathResult = MathResult - CHMOffset
6520 y1 = int(c1 - YconvM * MathResult)
6529 if ZOHold.get() == 1:
6530 Tmathline.append(int(x1))
6531 Tmathline.append(int(ypm))
6532 Tmathline.append(int(x1))
6533 Tmathline.append(int(y1))
6535 Tmathline.append(int(x1))
6536 Tmathline.append(int(y1))
6538 if Show_MathX.get() > 0:
6540 MathResult = eval(MathXString)
6541 MathResult = MathResult - CHMXOffset
6542 y1 = int(c1 - XconvMxy * MathResult)
6551 if ZOHold.get() == 1:
6552 TMXline.append(int(x1))
6553 TMXline.append(int(ypmx))
6554 TMXline.append(int(x1))
6555 TMXline.append(int(y1))
6557 TMXline.append(int(x1))
6558 TMXline.append(int(y1))
6560 if Show_MathY.get() > 0:
6562 MathResult = eval(MathYString)
6563 MathResult = MathResult - CHMYOffset
6564 y1 = int(c1 - YconvMxy * MathResult)
6573 if ZOHold.get() == 1:
6574 TMYline.append(int(x1))
6575 TMYline.append(int(ypmy))
6576 TMYline.append(int(x1))
6577 TMYline.append(int(y1))
6579 TMYline.append(int(x1))
6580 TMYline.append(int(y1))
6583 yd = int(c1 - (( DBuff0[t]*0.9 - 5 ) * Dconv))
6584 D0line.append(int(x1))
6587 yd = int(c1 - (( DBuff1[t]*0.9 - 4 ) * Dconv))
6588 D1line.append(int(x1))
6591 yd = int(c1 - (( DBuff2[t]*0.9 - 3 ) * Dconv))
6592 D2line.append(int(x1))
6595 yd = int(c1 - (( DBuff3[t]*0.9 - 2 ) * Dconv))
6596 D3line.append(int(x1))
6600 if MouseX - X0L >= x
and MouseX - X0L < (x + Xstep):
6601 Xfine = MouseX - X0L - x
6602 MouseCAV = ypv1 - (DvY1 * (Xfine/Xstep))
6603 MouseCAI = ypi1 - (DiY1 * (Xfine/Xstep))
6604 MouseCBV = ypv2 - (DvY2 * (Xfine/Xstep))
6605 MouseCBI = ypi2 - (DiY2 * (Xfine/Xstep))
6612 Tstep = DISsamples / GRW
6617 t = int(SCstart + TRIGGERsample)
6618 if t > len(VBuffA)-1:
6626 if (t >= len(VBuffA)):
6630 ylo = VBuffA[t] - CHAOffset
6631 ilo = IBuffA[t] - CHAIOffset
6635 while n < (t + Tstep)
and n < TRACEsize:
6636 if ( ShowC1_V.get() == 1 ):
6637 v = VBuffA[t] - CHAOffset
6642 if ( ShowC1_I.get() == 1 ):
6643 i = IBuffA[t] - CHAIOffset
6649 if ( ShowC1_V.get() == 1 ):
6650 ylo = int(c1 - Yconv1 * ylo)
6651 yhi = int(c1 - Yconv1 * yhi)
6660 T1Vline.append(int(x1))
6661 T1Vline.append(int(ylo))
6662 T1Vline.append(int(x1))
6663 T1Vline.append(int(yhi))
6665 if ( ShowC1_I.get() == 1 ):
6666 ilo = int(c1 - YIconv1 * ilo)
6667 ihi = int(c1 - YIconv1 * ihi)
6676 T1Iline.append(int(x1))
6677 T1Iline.append(int(ilo))
6678 T1Iline.append(int(x1))
6679 T1Iline.append(int(ihi))
6681 ylo = VBuffB[t] - CHBOffset
6682 ilo = IBuffB[t] - CHBIOffset
6686 if MuxScreenStatus.get() == 0:
6687 while n < (t + Tstep)
and n < TRACEsize:
6688 if ( ShowC2_V.get() == 1 ):
6689 v = VBuffB[t] - CHBOffset
6694 if ( ShowC2_I.get() == 1 ):
6695 i = IBuffB[t] - CHBIOffset
6701 if ( ShowC2_V.get() == 1 ):
6702 ylo = int(c2 - Yconv2 * ylo)
6703 yhi = int(c2 - Yconv2 * yhi)
6713 T2Vline.append(int(x1))
6714 T2Vline.append(int(ylo))
6715 T2Vline.append(int(x1))
6716 T2Vline.append(int(yhi))
6718 if ( ShowC2_I.get() == 1 ):
6719 ilo = int(c2 - YIconv2 * ilo)
6720 ihi = int(c2 - YIconv2 * ihi)
6729 T2Iline.append(int(x1))
6730 T2Iline.append(int(ilo))
6731 T2Iline.append(int(x1))
6732 T2Iline.append(int(ihi))
6735 if Show_CBA.get() == 1
and len(VBuffMA)>4:
6736 if t < len(VBuffMA):
6737 ylo = VBuffMA[t] - CHBAOffset
6740 while n < (t + Tstep)
and n < len(VBuffMA):
6741 v = VBuffMA[t] - CHBAOffset
6747 ylo = int(c2 - YconvMA * ylo)
6748 yhi = int(c2 - YconvMA * yhi)
6757 TMAVline.append(int(x1))
6758 TMAVline.append(int(ylo))
6759 TMAVline.append(int(x1))
6760 TMAVline.append(int(yhi))
6761 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6763 if Show_CBB.get() == 1
and len(VBuffMB)>4:
6764 if t < len(VBuffMB):
6765 ylo = VBuffMB[t] - CHBBOffset
6768 while n < (t + Tstep)
and n < len(VBuffMB):
6769 v = VBuffMB[t] - CHBBOffset
6775 ylo = int(c2 - YconvMB * ylo)
6776 yhi = int(c2 - YconvMB * yhi)
6785 TMBVline.append(int(x1))
6786 TMBVline.append(int(ylo))
6787 TMBVline.append(int(x1))
6788 TMBVline.append(int(yhi))
6789 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6791 if Show_CBC.get() == 1
and len(VBuffMC)>4:
6792 if t < len(VBuffMC):
6793 ylo = VBuffMC[t] - CHBCOffset
6796 while n < (t + Tstep)
and n < len(VBuffMC):
6797 v = VBuffMC[t] - CHBCOffset
6803 ylo = int(c2 - YconvMC * ylo)
6804 yhi = int(c2 - YconvMC * yhi)
6813 TMCVline.append(int(x1))
6814 TMCVline.append(int(ylo))
6815 TMCVline.append(int(x1))
6816 TMCVline.append(int(yhi))
6817 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6819 if Show_CBD.get() == 1
and len(VBuffMD)>4:
6820 if t < len(VBuffMD):
6821 ylo = VBuffMD[t] - CHBDOffset
6824 while n < (t + Tstep)
and n < len(VBuffMD):
6825 v = VBuffMD[t] - CHBDOffset
6831 ylo = int(c2 - YconvMD * ylo)
6832 yhi = int(c2 - YconvMD * yhi)
6841 TMDVline.append(int(x1))
6842 TMDVline.append(int(ylo))
6843 TMDVline.append(int(x1))
6844 TMDVline.append(int(yhi))
6845 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6847 if ( ShowC2_I.get() == 1 ):
6848 while n < (t + Tstep)
and n < TRACEsize:
6849 i = IBuffB[t] - CHBIOffset
6855 ilo = int(c2 - YIconv2 * ilo)
6856 ihi = int(c2 - YIconv2 * ihi)
6865 T2Iline.append(int(x1))
6866 T2Iline.append(int(ilo))
6867 T2Iline.append(int(x1))
6868 T2Iline.append(int(ihi))
6869 if MathTrace.get() > 0:
6870 if MathTrace.get() == 1:
6871 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
6873 elif MathTrace.get() == 2:
6874 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
6876 elif MathTrace.get() == 3:
6877 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
6879 elif MathTrace.get() == 4:
6880 Ypower = VBuffA[t] * IBuffA[t]
6881 ytemp = YIconv1 * (Ypower - CHAIOffset)
6882 y1 = int(c1 - ytemp)
6884 elif MathTrace.get() == 5:
6885 Ypower = VBuffB[t] * IBuffB[t]
6886 ytemp = YIconv2 * (Ypower - CHBIOffset)
6887 y1 = int(c2 - ytemp)
6889 elif MathTrace.get() == 6:
6890 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
6891 ytemp = YIconv1 * (Yohms- CHAIOffset)
6892 y1 = int(c1 - ytemp)
6894 elif MathTrace.get() == 7:
6895 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
6896 ytemp = YIconv2 * (Yohms - CHBIOffset)
6897 y1 = int(c2 - ytemp)
6899 elif MathTrace.get() == 8:
6900 Ydif = (IBuffA[t] - IBuffB[t])
6901 ytemp = YIconv1 * (Ydif - CHAIOffset)
6902 y1 = int(c2 - ytemp)
6904 elif MathTrace.get() == 9:
6905 Ydif = (IBuffB[t] - IBuffA[t])
6906 ytemp = YIconv2 * (Ydif - CHBIOffset)
6907 y1 = int(c2 - ytemp)
6909 elif MathTrace.get() == 10:
6911 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6913 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6914 elif MathTrace.get() == 11:
6916 Y1 = (IBuffB[t] / IBuffA[t])
6918 Y1 = (IBuffB[t] / 0.000001)
6919 ytemp = YIconv2 * (Y1 - CHBIOffset)
6920 y1 = int(c2 - ytemp)
6922 elif MathTrace.get() == 12:
6925 MathResult = eval(MathString)
6926 MathResult = MathResult - CHMOffset
6927 y1 = int(c1 - YconvM * MathResult)
6936 if (ZOHold.get() == 1):
6937 Tmathline.append(int(x1))
6938 Tmathline.append(int(ypm))
6939 Tmathline.append(int(x1))
6940 Tmathline.append(int(y1))
6942 Tmathline.append(int(x1))
6943 Tmathline.append(int(y1))
6945 if Show_MathX.get() > 0:
6947 MathResult = eval(MathXString)
6948 MathResult = MathResult - CHMXOffset
6949 y1 = int(c1 - XconvMxy * MathResult)
6958 if ZOHold.get() == 1:
6959 TMXline.append(int(x1))
6960 TMXline.append(int(ypmx))
6961 TMXline.append(int(x1))
6962 TMXline.append(int(y1))
6964 TMXline.append(int(x1))
6965 TMXline.append(int(y1))
6967 if Show_MathY.get() > 0:
6969 MathResult = eval(MathYString)
6970 MathResult = MathResult - CHMYOffset
6971 y1 = int(c1 - YconvMxy * MathResult)
6980 if ZOHold.get() == 1:
6981 TMYline.append(int(x1))
6982 TMYline.append(int(ypmy))
6983 TMYline.append(int(x1))
6984 TMYline.append(int(y1))
6986 TMYline.append(int(x1))
6987 TMYline.append(int(y1))
6990 if (MouseX - X0L) == x:
6996 if (t > len(VBuffA)):
7004 if TgInput.get() > 0
or ChopTrig.get() > 0:
7005 if TgInput.get() == 1
or TgInput.get() == 5:
7007 ytemp = Yconv1 * (float(TRIGGERlevel)-CHAOffset)
7008 y1 = int(c1 - ytemp)
7009 elif TgInput.get() == 2:
7011 y1 = int(c1 - YIconv1 * (float(TRIGGERlevel) - CHAIOffset))
7012 elif TgInput.get() == 3:
7014 ytemp = Yconv2 * (float(TRIGGERlevel)-CHBOffset)
7015 y1 = int(c2 - ytemp)
7016 elif TgInput.get() == 4:
7018 y1 = int(c2 - YIconv2 * (float(TRIGGERlevel) - CHBIOffset))
7019 elif ChopTrig.get() == 1:
7021 ytemp = YconvMA * (float(TRIGGERlevel)-CHBAOffset)
7022 y1 = int(c1 - ytemp)
7023 elif ChopTrig.get() == 2:
7025 ytemp = YconvMB * (float(TRIGGERlevel)-CHBBOffset)
7026 y1 = int(c1 - ytemp)
7027 elif ChopTrig.get() == 3:
7029 ytemp = YconvMC * (float(TRIGGERlevel)-CHBCOffset)
7030 y1 = int(c1 - ytemp)
7031 elif ChopTrig.get() == 4:
7033 ytemp = YconvMD * (float(TRIGGERlevel)-CHBDOffset)
7034 y1 = int(c1 - ytemp)
7040 Triggerline.append(int(x1-5))
7041 Triggerline.append(int(y1+5))
7042 Triggerline.append(int(x1+5))
7043 Triggerline.append(int(y1))
7044 Triggerline.append(int(x1-5))
7045 Triggerline.append(int(y1-5))
7046 Triggerline.append(int(x1-5))
7047 Triggerline.append(int(y1+5))
7049 if TgEdge.get() == 0:
7055 Triggersymbol.append(int(x1-10))
7056 Triggersymbol.append(int(Ymin+y1))
7057 Triggersymbol.append(int(x1))
7058 Triggersymbol.append(int(Ymin+y1))
7059 Triggersymbol.append(int(x1))
7060 Triggersymbol.append(int(Ymin+y2))
7061 Triggersymbol.append(int(x1+10))
7062 Triggersymbol.append(int(Ymin+y2))
7065 global VBuffA, VBuffB, IBuffA, IBuffB
7066 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
7067 global XYlineVA, XYlineVB, XYlineIA, XYlineIB, XYlineM, XYlineMX, XYlineMY
7068 global MathXString, MathYString, MathAxis, MathXAxis, MathYAxis
7069 global HoldOff, HoldOffentry
7070 global X0LXY, Y0TXY, GRWXY, GRHXY
7071 global YminXY, YmaxXY, XminXY, XmaxXY
7072 global SHOWsamples, ZOHold, AWGBMode
7073 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
7074 global TRACES, TRACESread, RUNstatus
7075 global Xsignal, YsignalVA, YsignalVB, YsignalIA, YsignalIB, YsignalM, YsignalMX, YsignalMY
7076 global CHAsbxy, CHBsbxy, CHAOffset, CHBOffset, CHAIsbxy, CHBIsbxy, CHAIOffset, CHBIOffset
7081 global SCstart, MathString
7082 global TRIGGERsample, TRACEsize, DX
7083 global TRIGGERlevel, TRIGGERentry, AutoLevel
7084 global InOffA, InGainA, InOffB, InGainB
7085 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
7086 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
7087 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7088 global CHAVPosEntryxy, CHAIPosEntryxy, CHAVPosEntryxy, CHBIPosEntryxy
7089 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
7090 global HozPoss, HozPossentry
7093 if len(VBuffA) < 100:
7095 TRACEsize = SHOWsamples
7097 yloVA = yloVB = yloIA = yloIB = yloM = yloMX = yloMY = 0.0
7101 CH1pdvRange = float(eval(CHAsbxy.get()))
7103 CHAsbxy.delete(0,END)
7104 CHAsbxy.insert(0, CH1pdvRange)
7106 CH2pdvRange = float(eval(CHBsbxy.get()))
7108 CHBsbxy.delete(0,END)
7109 CHBsbxy.insert(0, CH2pdvRange)
7111 CH1IpdvRange = float(eval(CHAIsbxy.get()))
7113 CHAIsbxy.delete(0,END)
7114 CHAIsbxy.insert(0, CH1IpdvRange)
7116 CH2IpdvRange = float(eval(CHBIsbxy.get()))
7118 CHBIsbxy.delete(0,END)
7119 CHBIsbxy.insert(0, CH2IpdvRange)
7122 CHAOffset = float(eval(CHAVPosEntryxy.get()))
7124 CHAVPosEntryxy.delete(0,END)
7125 CHAVPosEntryxy.insert(0, CHAOffset)
7127 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
7129 CHAIPosEntryxy.delete(0,END)
7130 CHAIPosEntryxy.insert(0, CHAIOffset)
7132 CHBOffset = float(eval(CHBVPosEntryxy.get()))
7134 CHBVPosEntry.delete(0,END)
7135 CHBVPosEntry.insert(0, CHBOffset)
7137 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
7139 CHBIPosEntryxy.delete(0,END)
7140 CHBIPosEntryxy.insert(0, CHBIOffset)
7142 if CH1pdvRange < 0.001:
7144 if CH2pdvRange < 0.001:
7146 if CH1IpdvRange < 0.1:
7148 if CH2IpdvRange < 0.1:
7151 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7152 Yconv2 = float(GRHXY/10.0) / CH2pdvRange
7153 YIconv1 = float(GRHXY/10.0) / CH1IpdvRange
7154 YIconv2 = float(GRHXY/10.0) / CH2IpdvRange
7155 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
7156 Xconv2 = float(GRWXY/10.0) / CH2pdvRange
7157 XIconv1 = float(GRWXY/10.0) / CH1IpdvRange
7158 XIconv2 = float(GRWXY/10.0) / CH2IpdvRange
7160 if MathAxis ==
"V-A":
7162 CHMOffset = CHAOffset
7163 elif MathAxis ==
"V-B":
7165 CHMOffset = CHBOffset
7166 elif MathAxis ==
"I-A":
7168 CHMOffset = CHAIOffset
7169 elif MathAxis ==
"I-B":
7171 CHMOffset = CHBIOffset
7174 CHMYOffset = CHAOffset
7175 if MathYAxis ==
"V-A":
7177 CHMYOffset = CHAOffset
7178 elif MathYAxis ==
"V-B":
7180 CHMYOffset = CHBOffset
7181 elif MathYAxis ==
"I-A":
7183 CHMYOffset = CHAIOffset
7184 elif MathYAxis ==
"I-B":
7186 CHMYOffset = CHBIOffset
7189 CHMYOffset = CHAOffset
7190 if MathXAxis ==
"V-A":
7192 CHMXOffset = CHAOffset
7194 elif MathXAxis ==
"V-B":
7196 CHMXOffset = CHBOffset
7198 elif MathXAxis ==
"I-A":
7200 CHMXOffset = CHAIOffset
7202 elif MathXAxis ==
"I-B":
7204 CHMXOffset = CHBIOffset
7208 CHMXOffset = CHAOffset
7218 t = int(TRIGGERsample)
7219 c1 = GRHXY / 2.0 + Y0TXY
7220 c2 = GRWXY / 2.0 + X0LXY
7221 while (t < TRACEsize):
7223 if Xsignal.get() == 1:
7224 xlo = VBuffA[t] - CHAOffset
7225 xlo = int(c2 + Xconv1 * xlo)
7226 elif Xsignal.get() == 3:
7227 xlo = VBuffB[t] - CHBOffset
7228 xlo = int(c2 + Xconv2 * xlo)
7229 elif Xsignal.get() == 2:
7230 xlo = (IBuffA[t]) - CHAIOffset
7231 xlo = int(c2 + XIconv1 * xlo)
7232 elif Xsignal.get() == 4:
7233 xlo = (IBuffB[t]) - CHBIOffset
7234 xlo = int(c2 + XIconv2 * xlo)
7235 elif Xsignal.get() == 5:
7236 if MathTrace.get() == 2:
7237 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
7238 xlo = int(c2 + Xconv1 * xlo)
7239 elif MathTrace.get() == 3:
7240 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
7241 xlo = int(c2 + Xconv2 * xlo)
7244 MathResult = eval(MathXString)
7245 MathResult = MathResult - CHMXOffset
7246 xlo = int(c2 + XconvMxy * MathResult)
7254 if YsignalVA.get() == 1:
7255 yloVA = VBuffA[t] - CHAOffset
7256 yloVA = int(c1 - Yconv1 * yloVA)
7261 XYlineVA.append(int(xlo))
7262 XYlineVA.append(int(yloVA))
7263 if YsignalVB.get() == 1:
7264 yloVB = VBuffB[t] - CHBOffset
7265 yloVB = int(c1 - Yconv2 * yloVB)
7270 XYlineVB.append(int(xlo))
7271 XYlineVB.append(int(yloVB))
7272 if YsignalIB.get() == 1:
7273 yloIB = (IBuffB[t]) - CHBIOffset
7274 yloIB = int(c1 - YIconv2 * yloIB)
7279 XYlineIB.append(int(xlo))
7280 XYlineIB.append(int(yloIB))
7281 if YsignalIA.get() == 1:
7282 yloIA = (IBuffA[t]) - CHAIOffset
7283 yloIA = int(c1 - YIconv1 * yloIA)
7288 XYlineIA.append(int(xlo))
7289 XYlineIA.append(int(yloIA))
7290 if YsignalM.get() == 1:
7291 if MathTrace.get() == 2:
7292 yloM = VBuffA[t] - VBuffB[t] - CHAOffset
7293 yloM = int(c1 - Yconv1 * yloM)
7294 elif MathTrace.get() == 3:
7295 yloM = VBuffB[t] - VBuffA[t] - CHBOffset
7296 yloM = int(c1 - Yconv2 * yloM)
7299 MathResult = eval(MathString)
7300 MathResult = MathResult - CHMOffset
7301 yloM = int(c1 - YconvM * MathResult)
7308 XYlineM.append(int(xlo))
7309 XYlineM.append(int(yloM))
7310 if YsignalMX.get() == 1:
7312 MathResult = eval(MathXString)
7313 MathResult = MathResult - CHMXOffset
7314 yloMX = int(c1 - YconvMx * MathResult)
7321 XYlineMX.append(int(xlo))
7322 XYlineMX.append(int(yloMX))
7323 if YsignalMY.get() == 1:
7325 MathResult = eval(MathYString)
7326 MathResult = MathResult - CHMYOffset
7327 yloMY = int(c1 - YconvMy * MathResult)
7334 XYlineMY.append(int(xlo))
7335 XYlineMY.append(int(yloMY))
7340 global T1Vline, T2Vline, T1Iline, T2Iline, TXYline
7341 global TMXline, TMYline
7342 global T1VRline, T2VRline, T1IRline, T2IRline
7343 global D0line, D1line, D2line, D3line, D0, D1, D2, D3
7344 global Triggerline, Triggersymbol, Tmathline, TMRline, TXYRline
7345 global VBuffA, VBuffB, IBuffA, IBuffB
7346 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus, ChopMuxMode, ChopTrig
7347 global TMAVline, TMBVline, TMCVline, TMDVline, TMARline, TMBRline, TMCRline, TMDRline
7348 global VmemoryA, VmemoryB, VmemoryA, ImemoryB
7353 global FontSize, EnableHSsampling, ETSDisp, MinigenScreenStatus
7354 global LabelPlotText, PlotLabelText
7355 global MouseX, MouseY, MouseWidget, MouseCAV, MouseCAI, MouseCBV, MouseCBI
7356 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
7357 global ShowXCur, ShowYCur, TCursor, VCursor
7359 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Show_MathX, Show_MathY
7360 global ShowRA_V, ShowRA_I, ShowRB_V, ShowRB_I, ShowMath
7361 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MathUnits, MathXUnits, MathYUnits
7362 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
7363 global Xsignal, Ysignal, MathTrace, MathAxis, MathXAxis, MathYAxis
7364 global RUNstatus, SingleShot, ManualTrigger, session
7375 global TIMEdiv, Mulx, DISsamples
7376 global SAMPLErate, contloop, discontloop, HtMulEntry
7377 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry, TgInput
7378 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7, COLORtraceR7
7379 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6
7380 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6
7381 global CANVASwidth, CANVASheight
7382 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
7383 global ScreenTrefresh, SmoothCurves, Is_Triggered
7384 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
7385 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
7386 global InOffA, InGainA, InOffB, InGainB
7387 global CurOffA, CurOffB, CurGainA, CurGainB
7389 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
7390 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
7391 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
7392 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
7393 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
7394 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
7395 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
7396 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
7397 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
7398 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
7399 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
7400 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
7401 global AWGAShape, AWGBShape, MeasDiffAB, MeasDiffBA
7402 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7403 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
7404 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
7405 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
7406 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
7407 global DacScreenStatus, DigScreenStatus, CHA_RC_HP, CHB_RC_HP
7408 global D0, D1, D2, D3, D4, D5, D6, D7
7409 global DevID, devx, MarkerNum, MarkerScale, MeasGateLeft, MeasGateRight, MeasGateStatus
7410 global HozPoss, HozPossentry, First_Slow_sweep, Roll_Mode
7411 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
7412 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
7413 global CHBADelayR1, CHBADelayR2, CHBADelayF, MeasDelay
7419 Tstep = (10.0 * TIMEdiv) / GRW
7422 CH1pdvRange = float(eval(CHAsb.get()))
7425 CHAsb.insert(0, CH1pdvRange)
7427 CH2pdvRange = float(eval(CHBsb.get()))
7430 CHBsb.insert(0, CH2pdvRange)
7432 CH1IpdvRange = float(eval(CHAIsb.get()))
7434 CHAIsb.delete(0,END)
7435 CHAIsb.insert(0, CH1IpdvRange)
7437 CH2IpdvRange = float(eval(CHBIsb.get()))
7439 CHBIsb.delete(0,END)
7440 CHBIsb.insert(0, CH2IpdvRange)
7443 CHAOffset = float(eval(CHAVPosEntry.get()))
7445 CHAVPosEntry.delete(0,END)
7446 CHAVPosEntry.insert(0, CHAOffset)
7448 CHAIOffset = float(eval(CHAIPosEntry.get()))
7450 CHAIPosEntry.delete(0,END)
7451 CHAIPosEntry.insert(0, CHAIOffset)
7453 CHBOffset = float(eval(CHBVPosEntry.get()))
7455 CHBVPosEntry.delete(0,END)
7456 CHBVPosEntry.insert(0, CHBOffset)
7458 CHBIOffset = float(eval(CHBIPosEntry.get()))
7460 CHBIPosEntry.delete(0,END)
7461 CHBIPosEntry.insert(0, CHBIOffset)
7463 HoldOff = float(eval(HoldOffentry.get()))
7467 HoldOffentry.delete(0,END)
7468 HoldOffentry.insert(0, HoldOff)
7469 if ETSDisp.get() > 0
or MinigenScreenStatus.get() > 0:
7471 Mulx = float(eval(HtMulEntry.get()))
7476 if EnableHSsampling > 0:
7477 HtMulEntry.delete(0,END)
7478 HtMulEntry.insert(0, 1)
7483 HozPoss = float(eval(HozPossentry.get()))
7485 HozPossentry.delete(0,END)
7486 HozPossentry.insert(0, HozPoss)
7487 if MuxScreenStatus.get() == 1:
7489 CHMApdvRange = float(eval(CHB_Asb.get()))
7491 CHB_Asb.delete(0,END)
7492 CHB_Asb.insert(0, CHMApdvRange)
7494 CHMBpdvRange = float(eval(CHB_Bsb.get()))
7496 CHB_Bsb.delete(0,END)
7497 CHB_Bsb.insert(0, CHMBpdvRange)
7499 CHMCpdvRange = float(eval(CHB_Csb.get()))
7501 CHB_Csb.delete(0,END)
7502 CHB_Csb.insert(0, CHMCpdvRange)
7504 CHMDpdvRange = float(eval(CHB_Dsb.get()))
7506 CHB_Dsb.delete(0,END)
7507 CHB_Dsb.insert(0, CHMDpdvRange)
7508 if CHMApdvRange < 0.001:
7509 CHMApdvRange = 0.001
7510 if CHMBpdvRange < 0.001:
7511 CHMBpdvRange = 0.001
7512 if CHMCpdvRange < 0.001:
7513 CHMCpdvRange = 0.001
7514 if CHMDpdvRange < 0.001:
7515 CHMDpdvRange = 0.001
7517 CHBAOffset = float(eval(CHB_APosEntry.get()))
7519 CHB_APosEntry.delete(0,END)
7520 CHB_APosEntry.insert(0, CHBAOffset)
7522 CHBBOffset = float(eval(CHB_BPosEntry.get()))
7524 CHB_BPosEntry.delete(0,END)
7525 CHB_BPosEntry.insert(0, CHBBOffset)
7527 CHBCOffset = float(eval(CHB_CPosEntry.get()))
7529 CHB_CPosEntry.delete(0,END)
7530 CHB_CPosEntry.insert(0, CHBCOffset)
7532 CHBDOffset = float(eval(CHB_DPosEntry.get()))
7534 CHB_DPosEntry.delete(0,END)
7535 CHB_DPosEntry.insert(0, CHBDOffset)
7537 if CH1pdvRange < 0.001:
7539 if CH2pdvRange < 0.001:
7541 if CH1IpdvRange < 0.1:
7543 if CH2IpdvRange < 0.1:
7545 vt = HoldOff + HozPoss
7546 if ScreenTrefresh.get() == 0:
7556 MathFlag1 = (MathAxis ==
"V-A" and MathTrace.get() == 12)
or (MathXAxis ==
"V-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-A" and Show_MathY.get() == 1)
7557 MathFlag2 = (MathAxis ==
"V-B" and MathTrace.get() == 12)
or (MathXAxis ==
"V-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-B" and Show_MathY.get() == 1)
7558 MathFlag3 = (MathAxis ==
"I-A" and MathTrace.get() == 12)
or (MathXAxis ==
"I-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-A" and Show_MathY.get() == 1)
7559 MathFlag4 = (MathAxis ==
"I-B" and MathTrace.get() == 12)
or (MathXAxis ==
"I-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-B" and Show_MathY.get() == 1)
7561 RightOffset = FontSize * 3
7562 LeftOffset = int(FontSize/2)
7563 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
7564 ca.create_text(x1-LeftOffset, 12, text=
"CA-V", fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize-1 ))
7565 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
7566 ca.create_text(x2+LeftOffset, 12, text=
"CA-I", fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize-1 ))
7567 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
7568 ca.create_text(x1-RightOffset+2, 12, text=
"CB-V", fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize-1 ))
7569 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
7570 ca.create_text(x2+RightOffset+4, 12, text=
"CB-I", fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize-1 ))
7573 y = Y0T + i * GRH/10.0
7576 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7581 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
7582 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7586 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7588 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
7589 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7591 Vaxis_label = str(round(Vaxis_value,3 ))
7592 ca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
7594 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
7595 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7596 Iaxis_label = str(round(Iaxis_value, 3))
7597 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
7599 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
7600 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7601 Vaxis_label = str(round(Vaxis_value, 3))
7602 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7604 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
7605 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7606 Iaxis_label = str(round(Iaxis_value, 3))
7607 ca.create_text(x2+RightOffset+4, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
7608 if MuxScreenStatus.get() == 1:
7609 if Show_CBA.get() == 1:
7610 Vaxis_value = (((5-i) * CHMApdvRange ) + CHBAOffset)
7611 Vaxis_label = str(round(Vaxis_value, 3))
7612 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7613 if Show_CBB.get() == 1:
7614 Iaxis_value = 1.0 * (((5-i) * CHMBpdvRange ) + CHBBOffset)
7615 Iaxis_label = str(round(Iaxis_value, 3))
7616 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace6, anchor=
"w", font=(
"arial", FontSize ))
7617 if Show_CBC.get() == 1:
7618 Iaxis_value = 1.0 * (((5-i) * CHMCpdvRange ) + CHBCOffset)
7619 Iaxis_label = str(round(Iaxis_value, 3))
7620 ca.create_text(x2+RightOffset-3, y, text=Iaxis_label, fill=COLORtrace7, anchor=
"w", font=(
"arial", FontSize ))
7621 if Show_CBD.get() == 1:
7622 Iaxis_value = 1.0 * (((5-i) * CHMDpdvRange ) + CHBDOffset)
7623 Iaxis_label = str(round(Iaxis_value, 3))
7624 ca.create_text(x2+RightOffset+10, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
7636 x = X0L + i * GRW/10.0
7639 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7644 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
7645 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7649 if Roll_Mode.get() == 0:
7651 axis_value = ((i * vx)+ vt) / 1000.0
7652 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
7653 if vx < 1000
and vx >= 1:
7654 axis_value = (i * vx) + vt
7655 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
7657 axis_value = ((i * vx) + vt) * 1000.0
7658 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
7659 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
7661 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7662 if Roll_Mode.get() == 0:
7664 axis_value = ((i * vx)+ vt) / 1000.0
7665 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
7666 if vx < 1000
and vx >= 1:
7667 axis_value = (i * vx) + vt
7668 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
7670 axis_value = ((i * vx) + vt) * 1000.0
7671 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
7672 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
7676 if Roll_Mode.get() == 0:
7677 if len(Triggerline) > 2:
7678 ca.create_polygon(Triggerline, outline=COLORtrigger, fill=COLORtrigger, width=1)
7679 ca.create_line(Triggersymbol, fill=COLORtrigger, width=GridWidth.get())
7680 if TgInput.get() == 1:
7682 if TgInput.get() == 2:
7684 if TgInput.get() == 3:
7686 if TgInput.get() == 4:
7688 if TgInput.get() == 5:
7689 TgLabel =
"VA or VB"
7690 if TgInput.get() == 6:
7691 TgLabel =
"Alternate"
7692 if ChopTrig.get() == 1:
7694 if ChopTrig.get() == 2:
7696 if ChopTrig.get() == 3:
7698 if ChopTrig.get() == 4:
7700 if Is_Triggered == 1:
7701 TgLabel = TgLabel +
" Triggered"
7703 TgLabel = TgLabel +
" Not Triggered"
7704 if SingleShot.get() > 0:
7705 TgLabel = TgLabel +
" Armed"
7706 x = X0L + (GRW/2) + 12
7707 ca.create_text(x, Ymin-FontSize, text=TgLabel, fill=COLORtrigger, anchor=
"w", font=(
"arial", FontSize ))
7709 if MarkerScale.get() == 0:
7710 Yconv1 = float(GRH/10.0) / CH1pdvRange
7711 Yoffset1 = CHAOffset
7712 COLORmarker = COLORtrace1
7714 if MarkerScale.get() == 1:
7716 Yconv1 = float(GRH/10.0) / CH1pdvRange
7717 Yoffset1 = CHAOffset
7718 COLORmarker = COLORtrace1
7720 if MarkerScale.get() == 2:
7722 Yconv1 = float(GRH/10.0) / CH2pdvRange
7723 Yoffset1 = CHBOffset
7724 COLORmarker = COLORtrace2
7726 if MarkerScale.get() == 3:
7728 Yconv1 = float(GRH/10.0) / CH1IpdvRange
7729 Yoffset1 = CHAIOffset
7730 COLORmarker = COLORtrace3
7732 if MarkerScale.get() == 4:
7734 Yconv1 = float(GRH/10.0) / CH2IpdvRange
7735 Yoffset1 = CHBIOffset
7736 COLORmarker = COLORtrace4
7739 if MarkerScale.get() == 5:
7741 Yconv1 = float(GRH/10.0) / CHMApdvRange
7742 Yoffset1 = CHBAOffset
7743 COLORmarker = COLORtrace2
7745 if MarkerScale.get() == 6:
7747 Yconv1 = float(GRH/10.0) / CHMBpdvRange
7748 Yoffset1 = CHBBOffset
7749 COLORmarker = COLORtrace6
7751 if MarkerScale.get() == 7:
7753 Yconv1 = float(GRH/10.0) / CHMCpdvRange
7754 Yoffset1 = CHBCOffset
7755 COLORmarker = COLORtrace7
7757 if MarkerScale.get() == 8:
7759 Yconv1 = float(GRH/10.0) / CHMDpdvRange
7760 Yoffset1 = CHBDOffset
7761 COLORmarker = COLORtrace4
7764 if ShowTCur.get() > 0:
7765 Dline = [TCursor, Y0T, TCursor, Y0T+GRH]
7766 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7767 Tpoint = ((TCursor-X0L) * Tstep) + vt
7768 Tpoint = Tpoint/Mulx
7770 axis_value = Tpoint / 1000.0
7771 V_label =
' {0:.2f} '.format(axis_value) +
" S"
7772 if Tpoint < 1000
and Tpoint >= 1:
7774 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
7776 axis_value = Tpoint * 1000.0
7777 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
7778 if Roll_Mode.get() == 0:
7779 ca.create_text(TCursor, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
7780 if ShowVCur.get() > 0:
7781 Dline = [X0L, VCursor, X0L+GRW, VCursor]
7782 ca.create_line(Dline, dash=(4,3), fill=COLORmarker, width=GridWidth.get())
7784 yvolts = ((VCursor-c1)/Yconv1) - Yoffset1
7785 V1String =
' {0:.3f} '.format(-yvolts)
7786 V_label = V1String + Units
7787 ca.create_text(X0L+GRW+2, VCursor, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7788 if ShowTCur.get() == 0
and ShowVCur.get() == 0
and MouseWidget == ca:
7789 if MouseX > X0L
and MouseX < X0L+GRW
and MouseY > Y0T
and MouseY < Y0T+GRH:
7790 Dline = [MouseX, Y0T, MouseX, Y0T+GRH]
7791 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7792 ca.create_oval(MouseX-GridWidth.get(), MouseY-GridWidth.get(), MouseX+GridWidth.get(), MouseY+GridWidth.get(), outline=COLORtrigger, fill=COLORtrigger, width=GridWidth.get())
7793 Tpoint = ((MouseX-X0L) * Tstep) + vt
7794 Tpoint = Tpoint/Mulx
7796 axis_value = Tpoint / 1000.0
7797 V_label =
' {0:.2f} '.format(axis_value) +
" S"
7798 if Tpoint < 1000
and Tpoint >= 1:
7800 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
7802 axis_value = Tpoint * 1000.0
7803 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
7804 if Roll_Mode.get() == 0:
7805 ca.create_text(MouseX, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
7806 Dline = [X0L, MouseY, X0L+GRW, MouseY]
7807 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7809 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7810 V1String =
' {0:.3f} '.format(-yvolts)
7811 V_label = V1String + Units
7812 ca.create_text(X0L+GRW+2, MouseY, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7814 if MeasGateStatus.get() == 1:
7815 LeftGate = X0L + MeasGateLeft / Tstep
7816 RightGate = X0L + MeasGateRight / Tstep
7817 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace5)
7818 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace7)
7821 if Roll_Mode.get() == 0:
7822 DT = (MeasGateRight-MeasGateLeft)/Mulx
7826 axis_value = DT / 1000.0
7827 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
7828 if DT < 1000
and DT >= 1:
7830 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
7832 axis_value = DT * 1000.0
7833 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
7835 DFreq =
' {0:.3f} '.format(1.0/DT)
7836 V_label =
" Delta T" + DeltaT
7838 V_label = V_label +
", Freq " + DFreq +
" KHz"
7843 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
7847 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
7849 y = Y0T + GRH + 7 - (MarkerNum*10)
7851 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
7855 ca.create_text(x, y, text=V_label, fill=COLORtrace5, anchor=Justify, font=(
"arial", FontSize ))
7858 SmoothBool = SmoothCurves.get()
7860 if len(T1Vline) > 4:
7861 ca.create_line(T1Vline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7862 if len(T1Iline) > 4:
7863 ca.create_line(T1Iline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7864 if len(T2Vline) > 4:
7865 ca.create_line(T2Vline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7866 if len(T2Iline) > 4:
7867 ca.create_line(T2Iline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7868 if len(Tmathline) > 4
and MathTrace.get() > 0:
7869 ca.create_line(Tmathline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7870 if len(TMXline) > 4 :
7871 ca.create_line(TMXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7872 if len(TMYline) > 4 :
7873 ca.create_line(TMYline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7874 if MuxScreenStatus.get() == 1:
7875 if len(TMAVline) > 4:
7876 ca.create_line(TMAVline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7877 if len(TMBVline) > 4:
7878 ca.create_line(TMBVline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7879 if len(TMCVline) > 4:
7880 ca.create_line(TMCVline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7881 if len(TMDVline) > 4:
7882 ca.create_line(TMDVline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7883 if ShowRMA.get() == 1
and len(TMARline) > 4:
7884 ca.create_line(TMARline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7885 if ShowRMB.get() == 1
and len(TMBRline) > 4:
7886 ca.create_line(TMBRline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7887 if ShowRMC.get() == 1
and len(TMCRline) > 4:
7888 ca.create_line(TMCRline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7889 if ShowRMD.get() == 1
and len(TMDRline) > 4:
7890 ca.create_line(TMDRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7891 if ShowRA_V.get() == 1
and len(T1VRline) > 4:
7892 ca.create_line(T1VRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7893 if ShowRA_I.get() == 1
and len(T1IRline) > 4:
7894 ca.create_line(T1IRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7895 if ShowRB_V.get() == 1
and len(T2VRline) > 4:
7896 ca.create_line(T2VRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7897 if ShowRB_I.get() == 1
and len(T2IRline) > 4:
7898 ca.create_line(T2IRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7899 if ShowMath.get() == 1
and len(TMRline) > 4:
7900 ca.create_line(TMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7901 if First_Slow_sweep == 1:
7904 ca.create_line(D0line, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7906 ca.create_line(D1line, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7908 ca.create_line(D2line, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7910 ca.create_line(D3line, fill=COLORzeroline, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7913 if session.continuous:
7914 sttxt =
"Running Continuous"
7916 sttxt =
"Running Discontinuous"
7917 if TRACEmodeTime.get() == 1:
7918 sttxt = sttxt +
" Averaging"
7919 if ManualTrigger.get() == 1:
7920 sttxt =
"Manual Trigger"
7921 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7923 if ScreenTrefresh.get() == 1:
7924 sttxt = sttxt +
" Persistance ON"
7926 de = ca.find_enclosed( X0L-1, Y0T+GRH+12, CANVASwidth, Y0T+GRH+100)
7930 de = ca.find_enclosed( X0L-1, -1, CANVASwidth, 20)
7933 if Roll_Mode.get() == 0:
7934 if LabelPlotText.get() > 0:
7935 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7937 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7939 if LabelPlotText.get() > 0:
7940 txt = PlotLabelText +
" Rolling Sweep " + sttxt
7942 txt =
"Device ID " + DevID[17:31] +
" Rolling Sweep " + sttxt
7945 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7948 BoxColor =
"#808080"
7949 if DacScreenStatus.get() == 0
and (DigScreenStatus.get() == 1
or MuxScreenStatus.get() == 1):
7950 if D0.get() == 0
and D4.get() == 0:
7951 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7953 BoxColor =
"#00ff00"
7955 BoxColor =
"#ff0000"
7956 ca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7958 ca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7959 if D1.get() == 0
and D5.get() == 0:
7960 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7962 BoxColor =
"#00ff00"
7964 BoxColor =
"#ff0000"
7965 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7967 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7968 if D2.get() == 0
and D6.get() == 0:
7969 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7971 BoxColor =
"#00ff00"
7973 BoxColor =
"#ff0000"
7974 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7976 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7977 if D3.get() == 0
and D7.get() == 0:
7978 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7980 BoxColor =
"#00ff00"
7982 BoxColor =
"#ff0000"
7983 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7985 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7986 ca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7990 txt =
' {0:.2f} '.format(vx / 1000.0) +
" S/div"
7991 if vx < 1000
and vx >= 1:
7992 txt =
' {0:.2f} '.format(vx) +
" mS/div"
7994 txt =
' {0:.2f} '.format(vx * 1000.0) +
" uS/div"
7998 txt = txt +
"View at "
8000 txt = txt + str(int(vt / 1000.0)) +
" S "
8001 if abs(vt) < 1000
and abs(vt) >= 1:
8002 txt = txt + str(int(vt)) +
" mS "
8004 txt = txt + str(int(vt * 1000.0)) +
" uS "
8006 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
8007 if ETSDisp.get() > 0:
8008 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
8010 if MeasGateStatus.get() == 1:
8011 if (MeasGateRight-MeasGateLeft) > 0:
8012 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
8013 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
8014 if Endsample <= hldn:
8015 Endsample = hldn + 2
8019 if ShowC1_V.get() == 1:
8020 if MeasAHW.get() == 1:
8021 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
8022 if MeasALW.get() == 1:
8023 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
8024 if MeasADCy.get() == 1:
8025 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
8026 if MeasAPER.get() == 1:
8027 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
8028 if MeasAFREQ.get() == 1:
8029 txt = txt +
" CA Freq = "
8032 V1String =
' {0:.1f} '.format(ChaF)
8033 txt = txt + str(V1String) +
" Hz "
8034 if ChaF > 1000
and ChaF < 1000000:
8035 V1String =
' {0:.1f} '.format(ChaF/1000)
8036 txt = txt + str(V1String) +
" KHz "
8038 V1String =
' {0:.1f} '.format(ChaF/1000000)
8039 txt = txt + str(V1String) +
" MHz "
8041 if ShowC2_V.get() == 1:
8042 if MeasBHW.get() == 1:
8043 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
8044 if MeasBLW.get() == 1:
8045 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
8046 if MeasBDCy.get() == 1:
8047 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
8048 if MeasBPER.get() == 1:
8049 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
8050 if MeasBFREQ.get() == 1:
8051 txt = txt +
" CB Freq = "
8054 V1String =
' {0:.1f} '.format(ChaF)
8055 txt = txt + str(V1String) +
" Hz "
8056 if ChaF > 1000
and ChaF < 1000000:
8057 V1String =
' {0:.1f} '.format(ChaF/1000)
8058 txt = txt + str(V1String) +
" KHz "
8060 V1String =
' {0:.1f} '.format(ChaF/1000000)
8061 txt = txt + str(V1String) +
" MHz "
8063 if MuxScreenStatus.get() == 0:
8064 if MeasPhase.get() == 1:
8065 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8066 if MeasDelay.get() == 1:
8067 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
8070 y = Y0T+GRH+int(2.5 *FontSize)
8071 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8072 if MeasTopV1.get() == 1
or MeasBaseV1.get() == 1
or MeasTopV2.get() == 1
or MeasBaseV2.get() == 1:
8075 if ShowC1_V.get() == 1:
8077 if CHA_RC_HP.get() == 1:
8081 txt = txt + str(CH1pdvRange) +
" V/div"
8082 if MeasDCV1.get() == 1:
8083 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
8084 if MeasMaxV1.get() == 1:
8085 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
8086 if MeasTopV1.get() == 1:
8087 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
8088 if MeasMinV1.get() == 1:
8089 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
8090 if MeasBaseV1.get() == 1:
8091 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
8092 if MeasMidV1.get() == 1:
8093 MidV1 = (MaxV1+MinV1)/2.0
8094 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
8095 if MeasPPV1.get() == 1:
8097 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
8098 if MeasRMSV1.get() == 1:
8099 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
8100 if MeasRMSVA_B.get() == 1:
8101 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
8102 if MeasDiffAB.get() == 1:
8103 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
8104 if MeasUserA.get() == 1:
8106 TempValue = eval(UserAString)
8107 V1String =
' {0:.4f} '.format(TempValue)
8110 txt = txt + UserALabel +
" = " + V1String
8111 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
8113 txt = txt + str(CH1IpdvRange) +
" mA/div"
8114 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
8116 txt = txt + str(CH1IpdvRange) +
" mA/div"
8117 if ShowC1_I.get() == 1:
8118 if MeasDCI1.get() == 1:
8119 V1String =
' {0:.2f} '.format(DCI1)
8120 txt = txt +
" AvgI = " + V1String
8121 if AWGAShape.get() == 0:
8123 Resvalue = (DCV1/DCI1)*1000
8124 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8126 txt = txt +
" Res = OverRange"
8127 if MeasMaxI1.get() == 1:
8128 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
8129 if MeasMinI1.get() == 1:
8130 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
8131 if MeasMidI1.get() == 1:
8132 MidI1 = (MaxI1+MinI1)/2.0
8133 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
8134 if MeasPPI1.get() == 1:
8136 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
8137 if MeasRMSI1.get() == 1:
8138 txt = txt +
" RMS = " +
' {0:.2f} '.format(SI1)
8141 y = Y0T+GRH+(4*FontSize)
8142 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8145 if MuxScreenStatus.get() == 1:
8147 if Show_CBA.get() > 0:
8149 elif Show_CBB.get() > 0:
8151 elif Show_CBC.get() > 0:
8153 elif Show_CBD.get() > 0:
8155 if MeasPhase.get() == 1:
8156 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8157 if MeasDelay.get() == 1:
8158 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
8159 if MeasUserB.get() == 1:
8161 TempValue = eval(UserBString)
8162 V1String =
' {0:.4f} '.format(TempValue)
8165 txt = txt + UserBLabel +
" = " + V1String
8166 if ShowC2_V.get() == 1:
8167 if CHB_RC_HP.get() == 1:
8171 txt = txt + str(CH2pdvRange) +
" V/div"
8172 if MeasDCV2.get() == 1:
8173 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
8174 if MeasMaxV2.get() == 1:
8175 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
8176 if MeasTopV2.get() == 1:
8177 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
8178 if MeasMinV2.get() == 1:
8179 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
8180 if MeasBaseV2.get() == 1:
8181 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
8182 if MeasMidV2.get() == 1:
8183 MidV2 = (MaxV2+MinV2)/2.0
8184 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
8185 if MeasPPV2.get() == 1:
8187 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
8188 if MeasRMSV2.get() == 1:
8189 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
8190 if MeasDiffBA.get() == 1:
8191 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
8192 if MeasUserB.get() == 1:
8194 TempValue = eval(UserBString)
8195 V1String =
' {0:.4f} '.format(TempValue)
8198 txt = txt + UserBLabel +
" = " + V1String
8199 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
8201 txt = txt + str(CH2IpdvRange) +
" mA/div"
8202 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
8204 txt = txt + str(CH2IpdvRange) +
" mA/div"
8205 if ShowC2_I.get() == 1:
8206 if MeasDCI2.get() == 1:
8207 V1String =
' {0:.2f} '.format(DCI2)
8208 txt = txt +
" AvgI = " + V1String
8209 if AWGBShape.get() == 0:
8211 Resvalue = (DCV2/DCI2)*1000
8212 R1String =
' {0:.1f} '.format(Resvalue)
8213 txt = txt +
" Res = " + R1String
8215 txt = txt +
" Res = OverRange"
8216 if MeasMaxI2.get() == 1:
8217 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
8218 if MeasMinI2.get() == 1:
8219 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
8220 if MeasMidI2.get() == 1:
8221 MidI2 = (MaxI2+MinI2)/2.0
8222 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
8223 if MeasPPI2.get() == 1:
8225 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
8226 if MeasRMSI2.get() == 1:
8227 txt = txt +
" RMS = " +
' {0:.2f} '.format(SI2)
8230 y = Y0T+GRH+int(5.5*FontSize)
8231 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8234 global XYlineVA, XYlineIA, XYlineVB, XYlineIB, XYlineM, XYlineMX, XYlineMY
8235 global Tmathline, TMRline, XYRlineVA, XYRlineIA, XYRlineVB, XYRlineIB, XYRlineM, XYRlineMX, XYRlineMY
8240 global FontSize, LabelPlotText, PlotLabelText
8241 global XYca, MouseX, MouseY, MouseWidget
8242 global ShowXCur, ShowYCur, XCursor, YCursor
8244 global ShowMath, MathUnits, MathXUnits, MathYUnits
8245 global Xsignal, MathAxis, MathXAxis, MathYAxis
8246 global YsignalVA, YsignalIA, YsignalVB, YsignalIB, YsignalM, YsignalMY, YsignalMX
8247 global XYRefAV, XYRefAI, XYRefBV, XYRefBI, XYRefM, XYRefMX, XYRefMY
8248 global RUNstatus, SingleShot, ManualTrigger
8261 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry
8262 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace6, COLORtrace7
8263 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5
8264 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6, COLORtraceR7
8265 global CANVASwidthXY, CANVASheightXY, COLORXmarker, COLORYmarker
8266 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
8267 global ScreenXYrefresh, SmoothCurves
8268 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
8269 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
8270 global SV1, SI1, SV2, SI2, CHABphase
8271 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
8272 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
8273 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
8274 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
8275 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase
8276 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
8277 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
8278 global AWGAShape, AWGBShape
8279 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
8280 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
8281 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
8282 global DacScreenStatus, DigScreenStatus
8283 global D0, D1, D2, D3, D4, D5, D6, D7
8284 global DevID, devx, MarkerNum, MarkerScale
8285 global HozPoss, HozPossentry
8286 global HistAsPercent, VBuffA, VBuffB, HBuffA, HBuffB
8287 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
8288 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
8291 Ymax = Y0TXY + GRHXY
8292 RightOffset = FontSize * 3
8293 LeftOffset = int(FontSize/2)
8295 InOffA = float(eval(CHAVOffsetEntry.get()))
8297 CHAVOffsetEntry.delete(0,END)
8298 CHAVOffsetEntry.insert(0, InOffA)
8300 InGainA = float(eval(CHAVGainEntry.get()))
8302 CHAVGainEntry.delete(0,END)
8303 CHAVGainEntry.insert(0, InGainA)
8305 InOffB = float(eval(CHBVOffsetEntry.get()))
8307 CHBVOffsetEntry.delete(0,END)
8308 CHBVOffsetEntry.insert(0, InOffB)
8310 InGainB = float(eval(CHBVGainEntry.get()))
8312 CHBVGainEntry.delete(0,END)
8313 CHBVGainEntry.insert(0, InGainB)
8316 CH1pdvRange = float(eval(CHAsbxy.get()))
8318 CHAsbxy.delete(0,END)
8319 CHAsbxy.insert(0, CH1pdvRange)
8321 CH2pdvRange = float(eval(CHBsbxy.get()))
8323 CHBsbxy.delete(0,END)
8324 CHBsbxy.insert(0, CH2pdvRange)
8326 CH1IpdvRange = float(eval(CHAIsbxy.get()))
8328 CHAIsbxy.delete(0,END)
8329 CHAIsbxy.insert(0, CH1IpdvRange)
8331 CH2IpdvRange = float(eval(CHBIsbxy.get()))
8333 CHBIsbxy.delete(0,END)
8334 CHBIsbxy.insert(0, CH2IpdvRange)
8337 CHAOffset = float(eval(CHAVPosEntryxy.get()))
8339 CHAVPosEntryxy.delete(0,END)
8340 CHAVPosEntryxy.insert(0, CHAOffset)
8342 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
8344 CHAIPosEntryxy.delete(0,END)
8345 CHAIPosEntryxy.insert(0, CHAIOffset)
8347 CHBOffset = float(eval(CHBVPosEntryxy.get()))
8349 CHBVPosEntry.delete(0,END)
8350 CHBVPosEntry.insert(0, CHBOffset)
8352 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
8354 CHBIPosEntryxy.delete(0,END)
8355 CHBIPosEntryxy.insert(0, CHBIOffset)
8357 if CH1pdvRange < 0.001:
8359 if CH2pdvRange < 0.001:
8361 if CH1IpdvRange < 0.05:
8363 if CH2IpdvRange < 0.05:
8366 if Xsignal.get() == 6:
8367 CHAIOffset = 5 * CH1IpdvRange
8368 if Xsignal.get() == 7:
8369 CHBIOffset = 5 * CH2IpdvRange
8370 if ScreenXYrefresh.get() == 0:
8381 y = Y0TXY + i * GRHXY/10.0
8384 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
8389 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
8390 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8394 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8395 if YsignalIA.get() == 1
or Xsignal.get() == 6:
8396 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8397 Iaxis_label = str(round(Iaxis_value, 3))
8398 XYca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
8399 if YsignalIB.get() == 1
or Xsignal.get() == 7:
8400 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8401 Iaxis_label = str(round(Iaxis_value, 3))
8402 XYca.create_text(x2+RightOffset, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
8403 if YsignalVA.get() == 1:
8404 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8405 Vaxis_label = str(round(Vaxis_value, 3))
8406 XYca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
8407 if YsignalVB.get() == 1:
8408 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8409 Vaxis_label = str(round(Vaxis_value, 3))
8410 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
8411 if YsignalM.get() == 1:
8412 TempCOLOR = COLORtrace5
8413 if MathTrace.get() == 2:
8414 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8415 elif MathTrace.get() == 3:
8416 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8418 if MathAxis ==
"V-A":
8419 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8420 TempCOLOR = COLORtrace1
8421 elif MathAxis ==
"V-B":
8422 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8423 TempCOLOR = COLORtrace2
8424 elif MathAxis ==
"I-A":
8425 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8426 TempCOLOR = COLORtrace3
8427 elif MathAxis ==
"I-B":
8428 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8429 TempCOLOR = COLORtrace4
8431 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8432 Vaxis_label = str(round(Vaxis_value, 3))
8433 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8434 if YsignalMX.get() == 1:
8435 TempCOLOR = COLORtrace6
8436 if MathXAxis ==
"V-A":
8437 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8438 TempCOLOR = COLORtrace1
8439 elif MathXAxis ==
"V-B":
8440 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8441 TempCOLOR = COLORtrace2
8442 elif MathXAxis ==
"I-A":
8443 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8444 TempCOLOR = COLORtrace3
8445 elif MathXAxis ==
"I-B":
8446 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8447 TempCOLOR = COLORtrace4
8449 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8450 Vaxis_label = str(round(Vaxis_value, 3))
8451 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8452 if YsignalMY.get() == 1:
8453 TempCOLOR = COLORtrace7
8454 if MathYAxis ==
"V-A":
8455 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8456 TempCOLOR = COLORtrace1
8457 elif MathYAxis ==
"V-B":
8458 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
8459 TempCOLOR = COLORtrace2
8460 elif MathYAxis ==
"I-A":
8461 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
8462 TempCOLOR = COLORtrace3
8463 elif MathYAxis ==
"I-B":
8464 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
8465 TempCOLOR = COLORtrace4
8467 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
8468 Vaxis_label = str(round(Vaxis_value, 3))
8469 XYca.create_text(x1-RightOffset, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
8479 x = X0LXY + i * GRWXY/10.0
8482 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
8487 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
8488 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8491 if Xsignal.get() == 1
or Xsignal.get() == 6:
8492 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8493 Vaxis_label = str(round(Vaxis_value, 3))
8494 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
8495 elif Xsignal.get() == 3
or Xsignal.get() == 7:
8496 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8497 Vaxis_label = str(round(Vaxis_value, 3))
8498 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
8499 elif Xsignal.get() == 2:
8500 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8501 Iaxis_label = str(round(Iaxis_value, 3))
8502 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
8503 elif Xsignal.get() == 4:
8504 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8505 Iaxis_label = str(round(Iaxis_value, 3))
8506 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
8507 elif Xsignal.get() == 5:
8508 TempCOLOR = COLORtrace5
8509 if MathTrace.get() == 2:
8510 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8511 elif MathTrace.get() == 3:
8512 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8514 if MathXAxis ==
"V-A":
8515 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8516 TempCOLOR = COLORtrace1
8517 elif MathXAxis ==
"V-B":
8518 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8519 TempCOLOR = COLORtrace2
8520 elif MathXAxis ==
"I-A":
8521 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8522 TempCOLOR = COLORtrace3
8523 elif MathXAxis ==
"I-B":
8524 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8525 TempCOLOR = COLORtrace4
8527 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8528 TempCOLOR = COLORtrace5
8529 Vaxis_label = str(round(Vaxis_value, 3))
8530 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
8532 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
8533 if Xsignal.get() == 1
or Xsignal.get() == 6:
8534 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8535 Vaxis_label = str(round(Vaxis_value, 3))
8536 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
8537 elif Xsignal.get() == 3
or Xsignal.get() == 7:
8538 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8539 Vaxis_label = str(round(Vaxis_value, 3))
8540 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
8541 elif Xsignal.get() == 2:
8542 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8543 Iaxis_label = str(round(Iaxis_value, 3))
8544 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
8545 elif Xsignal.get() == 4:
8546 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8547 Iaxis_label = str(round(Iaxis_value, 3))
8548 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
8549 elif Xsignal.get() == 5:
8550 TempCOLOR = COLORtrace5
8551 if MathTrace.get() == 2:
8552 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8553 elif MathTrace.get() == 3:
8554 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8556 if MathXAxis ==
"V-A":
8557 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8558 TempCOLOR = COLORtrace1
8559 elif MathXAxis ==
"V-B":
8560 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
8561 TempCOLOR = COLORtrace2
8562 elif MathXAxis ==
"I-A":
8563 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
8564 TempCOLOR = COLORtrace3
8565 elif MathXAxis ==
"I-B":
8566 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
8567 TempCOLOR = COLORtrace4
8569 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
8570 Vaxis_label = str(round(Vaxis_value, 3))
8571 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
8575 if YsignalVA.get() == 1:
8576 if len(XYlineVA) > 4:
8577 XYca.create_line(XYlineVA, fill=COLORtrace1, width=TRACEwidth.get())
8578 if YsignalIA.get() == 1:
8579 if len(XYlineIA) > 4:
8580 XYca.create_line(XYlineIA, fill=COLORtrace3, width=TRACEwidth.get())
8581 if YsignalVB.get() == 1:
8582 if len(XYlineVB) > 4:
8583 XYca.create_line(XYlineVB, fill=COLORtrace2, width=TRACEwidth.get())
8584 if YsignalIB.get() == 1:
8585 if len(XYlineIB) > 4:
8586 XYca.create_line(XYlineIB, fill=COLORtrace4, width=TRACEwidth.get())
8587 if YsignalM.get() == 1:
8588 if len(XYlineM) > 4:
8589 XYca.create_line(XYlineM, fill=COLORtrace5, width=TRACEwidth.get())
8590 if YsignalMX.get() == 1:
8591 if len(XYlineMX) > 4:
8592 XYca.create_line(XYlineMX, fill=COLORtrace6, width=TRACEwidth.get())
8593 if YsignalMY.get() == 1:
8594 if len(XYlineMY) > 4:
8595 XYca.create_line(XYlineMY, fill=COLORtrace7, width=TRACEwidth.get())
8596 if len(XYRlineVA) > 4
and XYRefAV.get() == 1:
8597 XYca.create_line(XYRlineVA, fill=COLORtraceR1, width=TRACEwidth.get())
8598 if len(XYRlineVB) > 4
and XYRefBV.get() == 1:
8599 XYca.create_line(XYRlineVB, fill=COLORtraceR2, width=TRACEwidth.get())
8600 if len(XYRlineIA) > 4
and XYRefAI.get() == 1:
8601 XYca.create_line(XYRlineIA, fill=COLORtraceR3, width=TRACEwidth.get())
8602 if len(XYRlineIB) > 4
and XYRefBI.get() == 1:
8603 XYca.create_line(XYRlineIB, fill=COLORtraceR4, width=TRACEwidth.get())
8604 if len(XYRlineM) > 4
and XYRefM.get() == 1:
8605 XYca.create_line(XYRlineM, fill=COLORtraceR5, width=TRACEwidth.get())
8606 if len(XYRlineMX) > 4
and XYRefMX.get() == 1:
8607 XYca.create_line(XYRlineMX, fill=COLORtraceR6, width=TRACEwidth.get())
8608 if len(XYRlineMY) > 4
and XYRefMY.get() == 1:
8609 XYca.create_line(XYRlineMY, fill=COLORtraceR7, width=TRACEwidth.get())
8611 if Xsignal.get() == 6:
8614 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8615 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
8618 c2 = GRWXY / 2.0 + X0LXY
8620 if HistAsPercent == 1:
8621 ylo = float(HBuffA[0][b]) / len(VBuffA)
8625 ylo = int(y1 - (Yconv1 * ylo))
8630 xlo = HBuffA[1][b] - CHAOffset
8631 xlo = int(c2 + Xconv1 * xlo)
8632 Dline = [xlo,y1,xlo,ylo]
8633 XYca.create_line(Dline, fill=COLORtrace1)
8635 if Xsignal.get() == 7:
8638 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8639 Xconv1 = float(GRWXY/10.0) / CH2pdvRange
8641 c2 = GRWXY / 2.0 + X0LXY
8643 if HistAsPercent == 1:
8644 ylo = float(HBuffB[0][b]) / len(VBuffB)
8648 ylo = int(y1 - Yconv1 * ylo)
8653 xlo = HBuffB[1][b] - CHBOffset
8654 xlo = int(c2 + Xconv1 * xlo)
8655 Dline = [xlo,y1,xlo,ylo]
8656 XYca.create_line(Dline, fill=COLORtrace2)
8659 COLORXmarker = COLORtrace1
8660 COLORYmarker = COLORtrace2
8661 if Xsignal.get() == 1
or Xsignal.get() == 6:
8662 Xconv1 = float(GRWXY/10) / CH1pdvRange
8663 Xoffset1 = CHAOffset
8664 COLORXmarker = COLORtrace1
8666 if Xsignal.get() == 2:
8667 Xconv1 = float(GRWXY/10) / CH1IpdvRange
8668 Xoffset1 = CHAIOffset
8669 COLORXmarker = COLORtrace3
8671 if Xsignal.get() == 3
or Xsignal.get() == 7:
8672 Xconv1 = float(GRWXY/10) / CH2pdvRange
8673 Xoffset1 = CHBOffset
8674 COLORXmarker = COLORtrace2
8676 if Xsignal.get() == 4:
8677 Xconv1 = float(GRWXY/10) / CH2IpdvRange
8678 Xoffset1 = CHBIOffset
8679 COLORmarker = COLORtrace4
8681 if Xsignal.get() == 5:
8682 X_label = MathXUnits
8683 if MathXAxis ==
"V-A":
8684 Xconv1 = float(GRWXY/10) / CH1pdvRange
8685 Xoffset1 = CHAOffset
8686 COLORXmarker = COLORtrace1
8687 elif MathXAxis ==
"V-B":
8688 Xconv1 = float(GRWXY/10) / CH2pdvRange
8689 Xoffset1 = CHBOffset
8690 COLORXmarker = COLORtrace2
8691 elif MathXAxis ==
"I-A":
8692 Xconv1 = float(GRWXY/10) / CH1IpdvRange
8693 Xoffset1 = CHAIOffset
8694 COLORXmarker = COLORtrace3
8695 elif MathXAxis ==
"I-B":
8696 Xconv1 = float(GRWXY/10) / CH2IpdvRange
8697 Xoffset1 = CHBIOffset
8698 COLORXmarker = COLORtrace4
8700 Xconv1 = float(GRWXY/10) / CH1pdvRange
8701 Xoffset1 = CHAOffset
8702 COLORXmarker = COLORtrace1
8704 if YsignalVA.get() == 1
or YsignalM.get() == 1:
8705 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8706 Yoffset1 = CHAOffset
8707 COLORYmarker = COLORtrace1
8709 if YsignalIA.get() == 1:
8710 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8711 Yoffset1 = CHAIOffset
8712 COLORYmarker = COLORtrace3
8714 if YsignalVB.get() == 1
or YsignalM.get() == 1:
8715 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
8716 Yoffset1 = CHBOffset
8717 COLORYmarker = COLORtrace2
8719 if YsignalIB.get() == 1:
8720 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8721 Yoffset1 = CHBIOffset
8722 COLORYmarker = COLORtrace4
8724 if YsignalM.get() == 1
or YsignalMX.get() == 1
or YsignalMY.get() == 1:
8725 Y_label = MathYUnits
8726 if MathYAxis ==
"V-A":
8727 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8728 Yoffset1 = CHAOffset
8729 COLORYmarker = COLORtrace1
8730 elif MathYAxis ==
"V-B":
8731 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
8732 Yoffset1 = CHBOffset
8733 COLORYmarker = COLORtrace2
8734 elif MathYAxis ==
"I-A":
8735 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
8736 Yoffset1 = CHAIOffset
8737 COLORYmarker = COLORtrace3
8738 elif MathYAxis ==
"I-B":
8739 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
8740 Yoffset1 = CHBIOffset
8741 COLORYmarker = COLORtrace4
8743 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
8744 Yoffset1 = CHAOffset
8745 COLORYmarker = COLORtrace1
8746 if ShowXCur.get() > 0:
8747 Dline = [XCursor, Y0TXY, XCursor, Y0TXY+GRHXY]
8748 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
8749 c1 = GRWXY / 2.0 + X0LXY
8750 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
8751 XString =
' {0:.3f} '.format(xvolts)
8752 V_label = XString + X_label
8753 XYca.create_text(XCursor+1, YCursor-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
8754 if ShowYCur.get() > 0:
8755 Dline = [X0LXY, YCursor, X0LXY+GRWXY, YCursor]
8756 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
8757 c1 = GRHXY / 2.0 + Y0TXY
8758 yvolts = ((YCursor-c1)/Yconv1) - Yoffset1
8759 V1String =
' {0:.3f} '.format(-yvolts)
8760 V_label = V1String + Y_label
8761 XYca.create_text(XCursor+1, YCursor+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
8762 if ShowXCur.get() == 0
and ShowYCur.get() == 0
and MouseWidget == XYca:
8763 if MouseX > X0LXY
and MouseX < X0LXY+GRWXY
and MouseY > Y0TXY
and MouseY < Y0TXY+GRHXY:
8764 Dline = [MouseX, Y0TXY, MouseX, Y0TXY+GRHXY]
8765 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
8766 c1 = GRWXY / 2.0 + X0LXY
8767 xvolts = Xoffset1 - ((c1-MouseX)/Xconv1)
8768 XString =
' {0:.3f} '.format(xvolts)
8769 V_label = XString + X_label
8770 XYca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
8771 Dline = [X0LXY, MouseY, X0LXY+GRWXY, MouseY]
8772 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
8773 c1 = GRHXY / 2 + Y0TXY
8774 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
8775 V1String =
' {0:.3f} '.format(-yvolts)
8776 V_label = V1String + Y_label
8777 XYca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
8782 if TRACEmodeTime.get() == 1:
8783 sttxt = sttxt +
" Averaging"
8784 if ManualTrigger.get() == 1:
8785 sttxt =
"Manual Trigger"
8786 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
8788 if ScreenXYrefresh.get() == 1:
8789 sttxt = sttxt +
" Persistance ON"
8791 de = XYca.find_enclosed( X0LXY-1, Y0TXY+GRHXY+19, CANVASwidthXY, Y0TXY+GRHXY+100)
8795 de = XYca.find_enclosed( X0LXY-1, -1, CANVASwidthXY, 20)
8798 if LabelPlotText.get() > 0:
8799 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
8801 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
8804 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8807 BoxColor =
"#808080"
8808 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 1 :
8809 if D0.get() == 0
and D4.get() == 0:
8810 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
8812 BoxColor =
"#00ff00"
8814 BoxColor =
"#ff0000"
8815 XYca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
8817 XYca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
8818 if D1.get() == 0
and D5.get() == 0:
8819 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
8821 BoxColor =
"#00ff00"
8823 BoxColor =
"#ff0000"
8824 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
8826 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
8827 if D2.get() == 0
and D6.get() == 0:
8828 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
8830 BoxColor =
"#00ff00"
8832 BoxColor =
"#ff0000"
8833 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
8835 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
8836 if D3.get() == 0
and D7.get() == 0:
8837 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
8839 BoxColor =
"#00ff00"
8841 BoxColor =
"#ff0000"
8842 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
8844 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
8845 XYca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
8848 if Xsignal.get() == 1
or Xsignal.get() == 3:
8850 if Xsignal.get() == 1:
8851 if MeasAHW.get() == 1:
8852 txt = txt +
" CA Hi Width = " +
' {0:.2f} '.format(CHAHW) +
" mS "
8853 if MeasALW.get() == 1:
8854 txt = txt +
" CA Lo Width = " +
' {0:.2f} '.format(CHALW) +
" mS "
8855 if MeasADCy.get() == 1:
8856 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
8857 if MeasAPER.get() == 1:
8858 txt = txt +
" CA Period = " +
' {0:.2f} '.format(CHAperiod) +
" mS "
8859 if MeasAFREQ.get() == 1:
8860 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
8861 if Xsignal.get() == 3:
8862 if MeasBHW.get() == 1:
8863 txt = txt +
" CB Hi Width = " +
' {0:.2f} '.format(CHBHW) +
" mS "
8864 if MeasBLW.get() == 1:
8865 txt = txt +
" CB Lo Width = " +
' {0:.2f} '.format(CHBLW) +
" mS "
8866 if MeasBDCy.get() == 1:
8867 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
8868 if MeasBPER.get() == 1:
8869 txt = txt +
" CB Period = " +
' {0:.2f} '.format(CHBperiod) +
" mS "
8870 if MeasBFREQ.get() == 1:
8871 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
8872 if MeasPhase.get() == 1:
8873 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
8876 y = Y0TXY+GRHXY+int(2.5*FontSize)
8877 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8879 if Xsignal.get() == 1
or YsignalVA.get() == 1
or Xsignal.get() == 6:
8882 txt = txt + str(CH1pdvRange) +
" V/div"
8883 if MeasDCV1.get() == 1:
8884 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
8885 if MeasMaxV1.get() == 1:
8886 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
8887 if MeasTopV1.get() == 1:
8888 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
8889 if MeasMinV1.get() == 1:
8890 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
8891 if MeasBaseV1.get() == 1:
8892 txt = txt +
" Top = " +
' {0:.4f} '.format(VABase)
8893 if MeasMidV1.get() == 1:
8894 MidV1 = (MaxV1+MinV1)/2
8895 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
8896 if MeasPPV1.get() == 1:
8898 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
8899 if MeasRMSV1.get() == 1:
8900 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
8901 if MeasUserA.get() == 1:
8903 TempValue = eval(UserAString)
8904 V1String =
' {0:.4f} '.format(TempValue)
8907 txt = txt + UserALabel +
" = " + V1String
8908 if Xsignal.get() == 2:
8910 txt = txt + str(CH1IpdvRange) +
" mA/div"
8911 elif (Xsignal.get() == 2):
8913 txt = txt + str(CH1IpdvRange) +
" mA/div"
8914 if Xsignal.get() == 2
or YsignalIA.get() == 1:
8915 if MeasDCI1.get() == 1:
8916 V1String =
' {0:.2f} '.format(DCI1)
8917 txt = txt +
" AvgI = " + V1String
8918 if AWGAShape.get() == 0:
8920 Resvalue = (DCV1/DCI1)*1000
8921 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8923 txt = txt +
" Res = OverRange"
8924 if MeasMaxI1.get() == 1:
8925 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
8926 if MeasMinI1.get() == 1:
8927 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
8928 if MeasMidI1.get() == 1:
8929 MidI1 = (MaxI1+MinI1)/2
8930 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
8931 if MeasPPI1.get() == 1:
8933 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
8934 if MeasRMSI1.get() == 1:
8935 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
8938 y = Y0TXY+GRHXY+int(4*FontSize)
8939 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8942 if Xsignal.get() == 3
or YsignalVB.get() == 1
or Xsignal.get() == 7:
8944 txt = txt + str(CH2pdvRange) +
" V/div"
8945 if MeasDCV2.get() == 1:
8946 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
8947 if MeasMaxV2.get() == 1:
8948 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
8949 if MeasTopV2.get() == 1:
8950 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
8951 if MeasMinV2.get() == 1:
8952 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
8953 if MeasBaseV2.get() == 1:
8954 txt = txt +
" Top = " +
' {0:.4f} '.format(VBBase)
8955 if MeasMidV2.get() == 1:
8956 MidV2 = (MaxV2+MinV2)/2
8957 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
8958 if MeasPPV2.get() == 1:
8960 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
8961 if MeasRMSV2.get() == 1:
8962 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
8963 if MeasUserB.get() == 1:
8965 TempValue = eval(UserBString)
8966 V1String =
' {0:.4f} '.format(TempValue)
8969 txt = txt + UserBLabel +
" = " + V1String
8970 if Xsignal.get() == 4:
8972 txt = txt + str(CH2IpdvRange) +
" mA/div"
8973 elif Xsignal.get() == 4:
8975 txt = txt + str(CH2IpdvRange) +
" mA/div"
8976 if Xsignal.get() == 4
or YsignalIB.get() == 1:
8977 if MeasDCI2.get() == 1:
8978 V1String =
' {0:.2f} '.format(DCI2)
8979 txt = txt +
" AvgI = " + V1String
8980 if AWGBShape.get() == 0:
8982 Resvalue = (DCV2/DCI2)*1000
8983 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8985 txt = txt +
" Res = OverRange"
8986 if MeasMaxI2.get() == 1:
8987 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
8988 if MeasMinI2.get() == 1:
8989 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
8990 if MeasMidI2.get() == 1:
8991 MidI2 = (MaxI2+MinI2)/2
8992 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
8993 if MeasPPI2.get() == 1:
8995 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
8996 if MeasRMSI2.get() == 1:
8997 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
9000 y = Y0TXY+GRHXY+int(5.5 * FontSize)
9001 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
9004 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9006 if MarkerScale.get() != 1:
9008 CHAlab.config(style=
"Rtrace1.TButton")
9009 CHBlab.config(style=
"Strace2.TButton")
9010 CHAIlab.config(style=
"Strace3.TButton")
9011 CHBIlab.config(style=
"Strace4.TButton")
9016 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9018 if MarkerScale.get() != 3:
9020 CHAlab.config(style=
"Strace1.TButton")
9021 CHBlab.config(style=
"Strace2.TButton")
9022 CHAIlab.config(style=
"Rtrace3.TButton")
9023 CHBIlab.config(style=
"Strace4.TButton")
9028 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9030 if MarkerScale.get() != 2:
9032 CHAlab.config(style=
"Strace1.TButton")
9033 CHBlab.config(style=
"Rtrace2.TButton")
9034 CHAIlab.config(style=
"Strace3.TButton")
9035 CHBIlab.config(style=
"Strace4.TButton")
9040 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
9042 if MarkerScale.get() != 3:
9044 CHAlab.config(style=
"Strace1.TButton")
9045 CHBlab.config(style=
"Strace2.TButton")
9046 CHAIlab.config(style=
"Strace3.TButton")
9047 CHBIlab.config(style=
"Rtrace4.TButton")
9052 global MarkerXYScale, CHAxylab, CHBxylab
9054 MarkerXYScale.set(1)
9055 CHAxylab.config(style=
"Rtrace1.TButton")
9056 CHBxylab.config(style=
"Strace2.TButton")
9059 global MarkerXYScale, CHAxylab, CHBxylab
9061 MarkerXYScale.set(2)
9062 CHBxylab.config(style=
"Rtrace2.TButton")
9063 CHAxylab.config(style=
"Strace1.TButton")
9066 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
9070 if RUNstatus.get() == 0:
9072 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
9075 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca, MWcount
9076 global MeasGateStatus, MeasGateLeft, MeasGateRight, TIMEdiv, GRW
9078 ShiftKeyDwn = event.state & 1
9079 if event.widget == ca:
9080 if ShowTCur.get() > 0
or ShowVCur.get() > 0:
9081 if ShowTCur.get() > 0
and ShiftKeyDwn == 0:
9083 if event.num == 5
or event.delta == -120:
9085 if event.num == 4
or event.delta == 120:
9087 elif ShowVCur.get() > 0
or ShiftKeyDwn == 1:
9089 if event.num == 5
or event.delta == -120:
9091 if event.num == 4
or event.delta == 120:
9098 if MeasGateStatus.get() == 1:
9099 Tstep = (TIMEdiv / GRW) / 10
9100 if ShiftKeyDwn == 0:
9101 if event.num == 5
or event.delta == -120:
9102 MeasGateLeft = MeasGateLeft + (-100 * Tstep)
9103 if event.num == 4
or event.delta == 120:
9104 MeasGateLeft = MeasGateLeft + (100 * Tstep)
9106 if ShiftKeyDwn == 1:
9107 if event.num == 5
or event.delta == -120:
9108 MeasGateRight = MeasGateRight + (-100 * Tstep)
9109 if event.num == 4
or event.delta == 120:
9110 MeasGateRight = MeasGateRight + (100 * Tstep)
9116 if RUNstatus.get() == 0:
9120 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca, Bodeca
9122 shift_key = event.state & 1
9123 if event.widget == ca:
9124 if ShowVCur.get() > 0
and shift_key == 0:
9125 VCursor = VCursor - 1
9126 elif ShowVCur.get() > 0
and shift_key == 1:
9127 VCursor = VCursor - 5
9128 if RUNstatus.get() == 0:
9131 if event.widget == XYca:
9132 if ShowYCur.get() > 0
and shift_key == 0:
9133 YCursor = YCursor - 1
9134 elif ShowYCur.get() > 0
and shift_key == 1:
9135 YCursor = YCursor - 5
9136 if RUNstatus.get() == 0:
9141 if event.widget == Freqca:
9142 if ShowdBCur.get() > 0
and shift_key == 0:
9143 dBCursor = dBCursor - 1
9144 elif ShowdBCur.get() > 0
and shift_key == 1:
9145 dBCursor = dBCursor - 5
9146 if RUNstatus.get() == 0:
9151 if event.widget == Bodeca:
9152 if ShowBdBCur.get() > 0
and shift_key == 0:
9153 BdBCursor = BdBCursor - 1
9154 elif ShowBdBCur.get() > 0
and shift_key == 1:
9155 BdBCursor = BdBCursor - 5
9156 if RUNstatus.get() == 0:
9162 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca
9164 shift_key = event.state & 1
9165 if event.widget == ca:
9166 if ShowVCur.get() > 0
and shift_key == 0:
9167 VCursor = VCursor + 1
9168 elif ShowVCur.get() > 0
and shift_key == 1:
9169 VCursor = VCursor + 5
9170 if RUNstatus.get() == 0:
9173 if event.widget == XYca:
9174 if ShowYCur.get() > 0
and shift_key == 0:
9175 YCursor = YCursor + 1
9176 elif ShowYCur.get() > 0
and shift_key == 1:
9177 YCursor = YCursor + 5
9178 if RUNstatus.get() == 0:
9183 if event.widget == Freqca:
9184 if ShowdBCur.get() > 0
and shift_key == 0:
9185 dBCursor = dBCursor + 1
9186 elif ShowdBCur.get() > 0
and shift_key == 1:
9187 dBCursor = dBCursor + 5
9188 if RUNstatus.get() == 0:
9193 if event.widget == Bodeca:
9194 if ShowBdBCur.get() > 0
and shift_key == 0:
9195 BdBCursor = BdBCursor + 1
9196 elif ShowBdBCur.get() > 0
and shift_key == 1:
9197 BdBCursor = BdBCursor + 5
9198 if RUNstatus.get() == 0:
9204 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
9206 shift_key = event.state & 1
9207 if event.widget == ca:
9208 if ShowTCur.get() > 0
and shift_key == 0:
9209 TCursor = TCursor - 1
9210 elif ShowTCur.get() > 0
and shift_key == 1:
9211 TCursor = TCursor - 5
9212 if RUNstatus.get() == 0:
9215 if event.widget == XYca:
9216 if ShowXCur.get() > 0
and shift_key == 0:
9217 XCursor = XCursor - 1
9218 elif ShowXCur.get() > 0
and shift_key == 1:
9219 XCursor = XCursor - 5
9220 if RUNstatus.get() == 0:
9225 if event.widget == Freqca:
9226 if ShowFCur.get() > 0
and shift_key == 0:
9227 FCursor = FCursor - 1
9228 elif ShowFCur.get() > 0
and shift_key == 1:
9229 FCursor = FCursor - 5
9230 if RUNstatus.get() == 0:
9235 if event.widget == Bodeca:
9236 if ShowBPCur.get() > 0
and shift_key == 0:
9237 BPCursor = BPCursor - 1
9238 elif ShowBPCur.get() > 0
and shift_key == 1:
9239 BPCursor = BPCursor - 5
9240 if RUNstatus.get() == 0:
9246 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
9248 shift_key = event.state & 1
9249 if event.widget == ca:
9250 if ShowTCur.get() > 0
and shift_key == 0:
9251 TCursor = TCursor + 1
9252 elif ShowTCur.get() > 0
and shift_key == 1:
9253 TCursor = TCursor + 5
9254 if RUNstatus.get() == 0:
9257 if event.widget == XYca:
9258 if ShowXCur.get() > 0
and shift_key == 0:
9259 XCursor = XCursor + 1
9260 elif ShowXCur.get() > 0
and shift_key == 1:
9261 XCursor = XCursor + 5
9262 if RUNstatus.get() == 0:
9267 if event.widget == Freqca:
9268 if ShowFCur.get() > 0
and shift_key == 0:
9269 FCursor = FCursor + 1
9270 elif ShowFCur.get() > 0
and shift_key == 1:
9271 FCursor = FCursor + 5
9272 if RUNstatus.get() == 0:
9277 if event.widget == Bodeca:
9278 if ShowBPCur.get() > 0
and shift_key == 0:
9279 BPCursor = BPCursor + 1
9280 elif ShowBPCur.get() > 0
and shift_key == 1:
9281 BPCursor = BPCursor + 5
9282 if RUNstatus.get() == 0:
9288 global RUNstatus, ca, XYca, Freqca, Bodeca, IAca
9290 if event.widget == ca:
9291 if RUNstatus.get() == 0:
9293 elif RUNstatus.get() > 0:
9296 if event.widget == XYca:
9297 if RUNstatus.get() == 0:
9299 elif RUNstatus.get() > 0:
9304 if event.widget == IAca:
9305 if RUNstatus.get() == 0:
9307 elif RUNstatus.get() > 0:
9312 if event.widget == Freqca:
9313 if RUNstatus.get() == 0:
9315 elif RUNstatus.get() > 0:
9320 if event.widget == Bodeca:
9321 if RUNstatus.get() == 0:
9323 elif RUNstatus.get() > 0:
9334 global ca, MarkerLoc, Mulx, Roll_Mode
9335 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
9336 global TMsb, CHAsb, CHBsb, CHAIsb, CHBIsb, MarkerScale
9337 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
9338 global SAMPLErate, RUNstatus, MarkerNum, PrevV, PrevT
9339 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
9340 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
9341 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
9342 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
9343 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
9344 global MeasGateLeft, MeasGateRight, MeasGateStatus, MeasGateNum, TMsb, SAMPLErate
9347 HoldOff = float(eval(HoldOffentry.get()))
9351 HoldOffentry.delete(0,END)
9352 HoldOffentry.insert(0, HoldOff)
9355 TIMEdiv = float(eval(TMsb.get()))
9358 TMsb.delete(0,
"end")
9359 TMsb.insert(0,TIMEdiv)
9361 if TIMEdiv < 0.0002:
9364 if (RUNstatus.get() == 0):
9365 MarkerNum = MarkerNum + 1
9368 CH1pdvRange = float(eval(CHAsb.get()))
9371 CHAsb.insert(0, CH1pdvRange)
9373 CH2pdvRange = float(eval(CHBsb.get()))
9376 CHBsb.insert(0, CH2pdvRange)
9378 CH1IpdvRange = float(eval(CHAIsb.get()))
9380 CHAIsb.delete(0,END)
9381 CHAIsb.insert(0, CH1IpdvRange)
9383 CH2IpdvRange = float(eval(CHBIsb.get()))
9385 CHBIsb.delete(0,END)
9386 CHBIsb.insert(0, CH2IpdvRange)
9389 CHAOffset = float(eval(CHAVPosEntry.get()))
9391 CHAVPosEntry.delete(0,END)
9392 CHAVPosEntry.insert(0, CHAOffset)
9394 CHAIOffset = float(eval(CHAIPosEntry.get()))
9396 CHAIPosEntry.delete(0,END)
9397 CHAIPosEntry.insert(0, CHAIOffset)
9399 CHBOffset = float(eval(CHBVPosEntry.get()))
9401 CHBVPosEntry.delete(0,END)
9402 CHBVPosEntry.insert(0, CHBOffset)
9404 CHBIOffset = float(eval(CHBIPosEntry.get()))
9406 CHBIPosEntry.delete(0,END)
9407 CHBIPosEntry.insert(0, CHBIOffset)
9409 if CH1pdvRange < 0.001:
9411 if CH2pdvRange < 0.001:
9413 if CH1IpdvRange < 1.0:
9415 if CH2IpdvRange < 1.0:
9418 if MuxScreenStatus.get() == 1:
9420 CHMApdvRange = float(eval(CHB_Asb.get()))
9422 CHB_Asb.delete(0,END)
9423 CHB_Asb.insert(0, CHMApdvRange)
9425 CHMBpdvRange = float(eval(CHB_Bsb.get()))
9427 CHB_Bsb.delete(0,END)
9428 CHB_Bsb.insert(0, CHMBpdvRange)
9430 CHMCpdvRange = float(eval(CHB_Csb.get()))
9432 CHB_Csb.delete(0,END)
9433 CHB_Csb.insert(0, CHMCpdvRange)
9435 CHMDpdvRange = float(eval(CHB_Dsb.get()))
9437 CHB_Dsb.delete(0,END)
9438 CHB_Dsb.insert(0, CHMDpdvRange)
9439 YconvMA = float(GRH/10.0) / CHMApdvRange
9440 YconvMB = float(GRH/10.0) / CHMBpdvRange
9441 YconvMC = float(GRH/10.0) / CHMCpdvRange
9442 YconvMD = float(GRH/10.0) / CHMDpdvRange
9444 CHBAOffset = float(eval(CHB_APosEntry.get()))
9446 CHB_APosEntry.delete(0,END)
9447 CHB_APosEntry.insert(0, CHBAOffset)
9449 CHBBOffset = float(eval(CHB_BPosEntry.get()))
9451 CHB_BPosEntry.delete(0,END)
9452 CHB_BPosEntry.insert(0, CHBBOffset)
9454 CHBCOffset = float(eval(CHB_CPosEntry.get()))
9456 CHB_CPosEntry.delete(0,END)
9457 CHB_CPosEntry.insert(0, CHBCOffset)
9459 CHBDOffset = float(eval(CHB_DPosEntry.get()))
9461 CHB_DPosEntry.delete(0,END)
9462 CHB_DPosEntry.insert(0, CHBDOffset)
9463 Yoffset1 = CHAOffset
9464 if MarkerScale.get() == 1:
9465 Yconv1 = float(GRH/10.0) / CH1pdvRange
9466 Yoffset1 = CHAOffset
9467 COLORmarker = COLORtrace1
9469 elif MarkerScale.get() == 2:
9470 Yconv1 = float(GRH/10.0) / CH2pdvRange
9471 Yoffset1 = CHBOffset
9472 COLORmarker = COLORtrace2
9474 elif MarkerScale.get() == 3:
9475 Yconv1 = float(GRH/10.0) / CH1IpdvRange
9476 Yoffset1 = CHAIOffset
9477 COLORmarker = COLORtrace3
9479 elif MarkerScale.get() == 4:
9480 Yconv1 = float(GRH/10.0) / CH2IpdvRange
9481 Yoffset1 = CHBIOffset
9482 COLORmarker = COLORtrace4
9485 elif MarkerScale.get() == 5:
9486 Yconv1 = float(GRH/10.0) / CHMApdvRange
9487 Yoffset1 = CHBAOffset
9488 COLORmarker = COLORtrace2
9490 elif MarkerScale.get() == 6:
9491 Yconv1 = float(GRH/10.0) / CHMBpdvRange
9492 Yoffset1 = CHBBOffset
9493 COLORmarker = COLORtrace6
9495 elif MarkerScale.get() == 7:
9496 Yconv1 = float(GRH/10.0) / CHMCpdvRange
9497 Yoffset1 = CHBCOffset
9498 COLORmarker = COLORtrace7
9500 elif MarkerScale.get() == 8:
9501 Yconv1 = float(GRH/10.0) / CHMDpdvRange
9502 Yoffset1 = CHBDOffset
9503 COLORmarker = COLORtrace4
9506 Yconv1 = float(GRH/10.0) / CH1pdvRange
9507 Yoffset1 = CHAOffset
9508 COLORmarker = COLORtrace1
9511 c1 = GRH / 2.0 + Y0T
9512 xc1 = GRW / 2.0 + X0L
9513 c2 = GRH / 2.0 + Y0T
9515 ca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
9516 ca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
9518 Tstep = (10.0 * TIMEdiv) / GRW
9519 Tpoint = ((event.x-X0L) * Tstep) + HoldOff
9521 Tpoint = Tpoint/Mulx
9523 axis_value = Tpoint / 1000.0
9524 TString =
' {0:.2f} '.format(axis_value) +
" S "
9525 if Tpoint < 1000
and Tpoint >= 1:
9527 TString =
' {0:.2f} '.format(axis_value) +
" mS "
9529 axis_value = Tpoint * 1000.0
9530 TString =
' {0:.2f} '.format(axis_value) +
" uS "
9532 yvolts = ((event.y-c1)/Yconv1) - Yoffset1
9533 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
9534 V1String =
' {0:.3f} '.format(-yvolts)
9536 V1String =
' {0:.1f} '.format(-yvolts)
9537 V_label = str(MarkerNum) +
" " + TString + V1String
9538 V_label = V_label + Units
9540 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
9541 DeltaV =
' {0:.3f} '.format(PrevV-yvolts)
9543 DeltaV =
' {0:.1f} '.format(PrevV-yvolts)
9544 if Roll_Mode.get() == 0:
9547 axis_value = DT / 1000.0
9548 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
9549 if Tpoint < 1000
and Tpoint >= 1:
9551 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
9553 axis_value = DT * 1000.0
9554 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
9556 DFreq =
' {0:.3f} '.format(1.0/(Tpoint-PrevT))
9557 V_label = V_label +
" Delta " + DeltaT + DeltaV
9558 V_label = V_label + Units
9559 V_label = V_label +
", Freq " + DFreq +
" KHz"
9561 V_label = V_label +
" Delta " + DeltaV + Units
9564 y = Y0T + 3 + (MarkerNum*10)
9566 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
9568 y = Y0T + 3 + (MarkerNum*10)
9570 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
9572 y = Y0T + GRH + 3 - (MarkerNum*10)
9574 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
9576 y = Y0T + GRH + 3 - (MarkerNum*10)
9578 ca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=Justify, font=(
"arial", FontSize ))
9579 ca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
9583 if MeasGateStatus.get() == 1:
9585 Tstep = (10.0 * TIMEdiv) / GRW
9586 if MeasGateNum == 0:
9587 MeasGateLeft = ((event.x-X0L) * Tstep)
9590 MeasGateRight = ((event.x-X0L) * Tstep)
9592 LeftGate = X0L + MeasGateLeft / Tstep
9593 RightGate = X0L + MeasGateRight / Tstep
9594 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, fill=COLORtext)
9595 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, fill=COLORtext)
9601 if ShowC1_V.get() == 0:
9609 if ShowC2_V.get() == 0:
9617 if ShowC1_I.get() == 0:
9625 if ShowC2_I.get() == 0:
9675 global TRACEmodeTime
9677 if TRACEmodeTime.get() == 0:
9678 TRACEmodeTime.set(1)
9680 TRACEmodeTime.set(0)
9685 if ShowTCur.get() == 0:
9693 if ShowVCur.get() == 0:
9699 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus, XYca
9703 if RUNstatus.get() == 0:
9705 XYca.bind_all(
'<MouseWheel>', onCanvasXYScrollClick)
9708 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus
9709 if event.widget == XYca:
9710 if ShowXCur.get() > 0
or ShowYCur.get() > 0:
9711 ShiftKeyDwn = event.state & 1
9712 if ShowXCur.get() > 0
and ShiftKeyDwn == 0:
9714 if event.num == 5
or event.delta == -120:
9716 if event.num == 4
or event.delta == 120:
9719 elif ShowYCur.get() > 0
or ShiftKeyDwn == 1:
9721 if event.num == 5
or event.delta == -120:
9723 if event.num == 4
or event.delta == 120:
9726 if RUNstatus.get() == 0:
9736 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
9737 global TMsb, CHAsbxy, CHBsbxy, CHAIsbxy, CHBIsbxy, MarkerScale
9738 global CHAVPosEntryxy, CHAIPosEntryxy, CHBVPosEntryxy, CHBIPosEntryxy
9739 global SAMPLErate, RUNstatus, MarkerNum, PrevX, PrevY
9740 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
9741 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
9742 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
9745 if (RUNstatus.get() == 0):
9746 MarkerNum = MarkerNum + 1
9748 CH1pdvRange = float(eval(CHAsbxy.get()))
9750 CHAsbxy.delete(0,END)
9751 CHAsbxy.insert(0, CH1pdvRange)
9753 CH2pdvRange = float(eval(CHBsbxy.get()))
9756 CHBsb.insert(0, CH2pdvRange)
9758 CH1IpdvRange = float(eval(CHAIsbxy.get()))
9760 CHAIsbxy.delete(0,END)
9761 CHAIsbxy.insert(0, CH1IpdvRange)
9763 CH2IpdvRange = float(eval(CHBIsbxy.get()))
9765 CHBIsbxy.delete(0,END)
9766 CHBIsbxy.insert(0, CH2IpdvRange)
9769 CHAOffset = float(eval(CHAVPosEntryxy.get()))
9771 CHAVPosEntryxy.delete(0,END)
9772 CHAVPosEntryxy.insert(0, CHAOffset)
9774 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
9776 CHAIPosEntryxy.delete(0,END)
9777 CHAIPosEntryxy.insert(0, CHAIOffset)
9779 CHBOffset = float(eval(CHBVPosEntryxy.get()))
9781 CHBVPosEntryxy.delete(0,END)
9782 CHBVPosEntryxy.insert(0, CHBOffset)
9784 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
9786 CHBIPosEntryxy.delete(0,END)
9787 CHBIPosEntryxy.insert(0, CHBIOffset)
9789 if CH1pdvRange < 0.001:
9791 if CH2pdvRange < 0.001:
9793 if CH1IpdvRange < 1.0:
9795 if CH2IpdvRange < 1.0:
9798 HoldOff = float(eval(HoldOffentry.get()))
9802 HoldOffentry.delete(0,END)
9803 HoldOffentry.insert(0, HoldOff)
9805 Yconv1 = float(GRHXY/10) / CH1pdvRange
9806 Xconv1 = float(GRWXY/10) / CH1pdvRange
9807 Yconv2 = float(GRHXY/10) / CH2pdvRange
9808 Xconv2 = float(GRWXY/10) / CH2pdvRange
9809 YIconv1 = float(GRHXY/10) / CH1IpdvRange
9810 YIconv2 = float(GRHXY/10) / CH2IpdvRange
9811 COLORmarker = COLORtext
9812 Yoffset1 = CHAOffset
9813 c1 = GRHXY / 2 + Y0TXY
9814 xc1 = GRWXY / 2 + X0LXY
9815 c2 = GRHXY / 2 + Y0TXY
9817 XYca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
9818 XYca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
9819 XYca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
9820 V_label = str(MarkerNum) +
" "
9822 y = Y0TXY + 3 + (MarkerNum*10)
9823 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9824 if (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==3
or Ysignal.get()==5):
9825 yvolts = ((event.y-c2)/Yconv2) - CHBOffset
9826 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9827 VyString =
' {0:.3f} '.format(-yvolts)
9828 VxString =
' {0:.3f} '.format(-xvolts)
9829 V_label = V_label + VxString +
" V, " + VyString +
" V"
9831 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
9832 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9833 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
9835 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==1
or Ysignal.get()==5):
9836 yvolts = ((event.y-c1)/Yconv1) - CHAOffset
9837 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9838 VyString =
' {0:.3f} '.format(-yvolts)
9839 VxString =
' {0:.3f} '.format(-xvolts)
9840 V_label = V_label + VxString +
" V, " + VyString +
" V"
9842 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
9843 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9844 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
9846 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
9847 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9848 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
9849 VxString =
' {0:.3f} '.format(-xvolts)
9850 VyString =
' {0:.1f} '.format(-ymA)
9851 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9853 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9854 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9855 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9856 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9857 V_label = V_label +
", dV/dI " + DeltaR
9859 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
9860 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9861 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
9862 VxString =
' {0:.3f} '.format(-xvolts)
9863 VyString =
' {0:.1f} '.format(-ymA)
9864 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9866 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9867 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9868 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9869 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9870 V_label = V_label +
", dV/dI " + DeltaR
9872 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
9873 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
9874 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
9875 VxString =
' {0:.3f} '.format(-xvolts)
9876 VyString =
' {0:.1f} '.format(-ymA)
9877 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9879 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9880 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9881 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9882 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9883 V_label = V_label +
", dV/dI " + DeltaR
9885 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
9886 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9887 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
9888 VxString =
' {0:.3f} '.format(-xvolts)
9889 VyString =
' {0:.1f} '.format(-ymA)
9890 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9892 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9893 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9894 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9895 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9896 V_label = V_label +
", dV/dI " + DeltaR
9898 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
9912 rnd_ph_pos = (numpy.ones(N-1, dtype=numpy.complex)*
9913 numpy.exp(1j*numpy.random.uniform
9914 (0.0,2.0*numpy.pi, N-1)))
9915 rnd_ph_neg = numpy.flip(numpy.conjugate(rnd_ph_pos))
9916 rnd_ph_full = numpy.concatenate(([1],rnd_ph_pos,[1], rnd_ph_neg))
9917 r_s_full = numpy.concatenate((freq, numpy.roll(numpy.flip(freq), 1)))
9918 r_spectrum_rnd_ph = r_s_full * rnd_ph_full
9919 r_time_full = numpy.fft.ifft(r_spectrum_rnd_ph)
9923 if (density ==
True):
9925 r_time_full *= N*numpy.sqrt(fs/(N))
9926 return(numpy.real(r_time_full))
9934 mag = mag * 0.707106
9935 width = int(n/(4 * b))
9937 aband = numpy.ones(width)
9938 zband = numpy.zeros(width)
9939 bands = numpy.concatenate((aband, zband))
9941 bands = numpy.concatenate((bands, aband, zband))
9956 bands = numpy.zeros(n)
9958 bands = bands * (mag/2.0)
9967 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
9968 X = numpy.fft.rfft(x) / N
9969 S = numpy.sqrt(numpy.arange(X.size)+1.0)
9970 y = numpy.fft.irfft(X/S).real[:N]
9971 z = numpy.ndarray = mag
9972 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
9983 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
9984 X = numpy.fft.rfft(x) / N
9985 S = numpy.sqrt(numpy.arange(X.size))
9986 y = numpy.fft.irfft(X*S).real[:N]
9987 z = numpy.ndarray = mag
9988 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
9999 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
10000 X = numpy.fft.rfft(x) / N
10001 S = numpy.arange(X.size)+1
10002 y = numpy.fft.irfft(X/S).real[:N]
10003 z = numpy.ndarray = mag
10004 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
10015 x = numpy.random.normal(0.0, 1, N).astype(numpy.float32)
10016 X = numpy.fft.rfft(x) / N
10017 S = numpy.arange(X.size)
10018 y = numpy.fft.irfft(X*S).real[0:N]
10019 z = numpy.ndarray = mag
10020 y = y * numpy.sqrt((numpy.abs(z)**2).mean() / (numpy.abs(y)**2).mean())
10027 OutArray = Ampl*numpy.cos(numpy.linspace(0, 2*numpy.pi, Length))
10029 while k <= NrTones:
10031 Harmonic = Ampl*numpy.cos(numpy.linspace(0, k*2*numpy.pi, Length)+(numpy.pi*k*k/NrTones))
10032 OutArray = OutArray + Harmonic
10034 OutArray = OutArray + 2.5
10042 OutArray = numpy.array(OutArray)
10043 InArray = numpy.array(InArray)
10044 EndIndex = len(InArray)
10046 while StartIndex < WrFactor:
10047 OutArray = numpy.concatenate((OutArray, InArray[StartIndex:EndIndex:WrFactor]), axis=0)
10048 StartIndex = StartIndex + 1
10056 InArray = numpy.array(InArray)
10057 EndIndex = int(len(InArray)/WrFactor)
10059 while StartIndex < EndIndex:
10061 while LoopIndex < WrFactor:
10062 OutArray.append(InArray[StartIndex+LoopIndex])
10063 LoopIndex = LoopIndex + 1
10064 StartIndex = StartIndex + 1
10065 OutArray = numpy.array(OutArray)
10073 wavfile = wave.open(filename,
"w")
10076 framerate = SAMPLErate
10078 nframes = len(data)
10080 compname =
"not compressed"
10081 wavfile.setparams((nchannels,
10088 ArrN = numpy.array(data)
10089 ArrN /= numpy.max(numpy.abs(data))
10092 mul = int(s * amplitude)
10094 frames.append(struct.pack(
'h', mul))
10095 print( len(frames))
10096 frames =
''.join(frames)
10097 print( len(frames))
10098 for x
in xrange(0, repeat):
10100 wavfile.writeframes(frames)
10105 global AWGAAmplEntry, AWGAAmplvalue, AWGAMode, AWG_Amp_Mode
10106 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10109 AWGAAmplvalue = float(eval(AWGAAmplEntry.get()))
10111 AWGAAmplEntry.delete(0,
"end")
10112 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10114 if AWG_Amp_Mode.get() == 0:
10115 if AWGAMode.get() == 0:
10116 if AWGAAmplvalue > 5.00:
10117 AWGAAmplvalue = 5.00
10118 AWGAAmplEntry.delete(0,
"end")
10119 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10120 if AWGAAmplvalue < 0.00:
10121 AWGAAmplvalue = 0.00
10122 AWGAAmplEntry.delete(0,
"end")
10123 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10124 elif AWG_Amp_Mode.get() == 1:
10125 if AWGAMode.get() == 0:
10126 if AWGAAmplvalue > (2.5 / AWGA_Ext_Gain.get()):
10127 AWGAAmplvalue = 2.5 / AWGA_Ext_Gain.get()
10128 AWGAAmplEntry.delete(0,
"end")
10129 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10130 if AWGAAmplvalue < (-2.50 / AWGA_Ext_Gain.get()):
10131 AWGAAmplvalue = -2.50 / AWGA_Ext_Gain.get()
10132 AWGAAmplEntry.delete(0,
"end")
10133 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10134 if AWGAMode.get() == 1:
10135 if AWGAAmplvalue > 200.00:
10136 AWGAAmplvalue = 200.00
10137 AWGAAmplEntry.delete(0,
"end")
10138 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10139 if AWGAAmplvalue < -200.00:
10140 AWGAAmplvalue = -200.00
10141 AWGAAmplEntry.delete(0,
"end")
10142 AWGAAmplEntry.insert(0, AWGAAmplvalue)
10145 global AWGAOffsetEntry, AWGAOffsetvalue, AWGAMode, AWG_Amp_Mode
10146 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10149 AWGAOffsetvalue = float(eval(AWGAOffsetEntry.get()))
10151 AWGAOffsetEntry.delete(0,
"end")
10152 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10153 if AWG_Amp_Mode.get() == 0:
10154 if AWGAMode.get() == 0:
10155 if AWGAOffsetvalue > 5.00:
10156 AWGAOffsetvalue = 5.00
10157 AWGAOffsetEntry.delete(0,
"end")
10158 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10159 if AWGAOffsetvalue < 0.00:
10160 AWGAOffsetvalue = 0.00
10161 AWGAOffsetEntry.delete(0,
"end")
10162 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10163 elif AWG_Amp_Mode.get() == 1:
10164 if AWGAOffsetvalue > (2.50-AWGA_Ext_Offset.get()):
10165 AWGAOffsetvalue = 2.50-AWGA_Ext_Offset.get()
10166 AWGAOffsetEntry.delete(0,
"end")
10167 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10168 if AWGAOffsetvalue < (-2.50-AWGA_Ext_Offset.get()):
10169 AWGAOffsetvalue = -2.50-AWGA_Ext_Offset.get()
10170 AWGAOffsetEntry.delete(0,
"end")
10171 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10172 if AWGAMode.get() == 1:
10173 if AWGAOffsetvalue > 200.00:
10174 AWGAOffsetvalue = 200.00
10175 AWGAOffsetEntry.delete(0,
"end")
10176 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10177 if AWGAOffsetvalue < -200.00:
10178 AWGAOffsetvalue = -200.00
10179 AWGAOffsetEntry.delete(0,
"end")
10180 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
10183 global AWGAFreqEntry, AWGAFreqvalue, AWG_2X
10184 global BodeScreenStatus, BodeDisp, AWGRecLength
10187 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
10189 AWGAFreqEntry.delete(0,
"end")
10190 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10191 if AWG_2X.get() == 1:
10192 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
10193 if AWGAFreqvalue > 90000:
10194 AWGAFreqvalue = 90000
10195 AWGAFreqEntry.delete(0,
"end")
10196 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10198 if AWGAFreqvalue > 50000:
10199 AWGAFreqvalue = 50000
10200 AWGAFreqEntry.delete(0,
"end")
10201 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10203 if AWGAFreqvalue > 25000:
10204 AWGAFreqvalue = 25000
10205 AWGAFreqEntry.delete(0,
"end")
10206 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10207 if AWGAFreqvalue < 4.0:
10208 AWGRecLength = 32768*2
10210 AWGRecLength = 32768
10211 if AWGAFreqvalue < 0:
10213 AWGAFreqEntry.delete(0,
"end")
10214 AWGAFreqEntry.insert(0, AWGAFreqvalue)
10218 global AWGAPhaseDelay, phasealab, awgaph, awgadel
10220 if AWGAPhaseDelay.get() == 1:
10221 AWGAPhaseDelay.set(0)
10222 awgaph.configure(text=
"Phase")
10223 phasealab.configure(text=
"Deg")
10224 elif AWGAPhaseDelay.get() == 0:
10225 AWGAPhaseDelay.set(1)
10226 awgaph.configure(text=
"Delay")
10227 phasealab.configure(text=
"mSec")
10230 global AWGAPhaseDelay, phasealab, awgaph, awgadel
10232 if AWGAPhaseDelay.get() == 0:
10233 phasealab.configure(text=
"Deg")
10234 awgaph.configure(text=
"Phase")
10235 elif AWGAPhaseDelay.get() == 1:
10236 phasealab.configure(text=
"mSec")
10237 awgaph.configure(text=
"Delay")
10240 global AWGAPhaseEntry, AWGAPhasevalue
10243 AWGAPhasevalue = float(eval(AWGAPhaseEntry.get()))
10245 AWGAPhaseEntry.delete(0,
"end")
10246 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10248 if AWGAPhasevalue > 360:
10249 AWGAPhasevalue = 360
10250 AWGAPhaseEntry.delete(0,
"end")
10251 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10252 if AWGAPhasevalue < 0:
10254 AWGAPhaseEntry.delete(0,
"end")
10255 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
10258 global AWGADutyCycleEntry, AWGADutyCyclevalue
10261 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))/100
10263 AWGADutyCycleEntry.delete(0,
"end")
10264 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10266 if AWGADutyCyclevalue > 1:
10267 AWGADutyCyclevalue = 1
10268 AWGADutyCycleEntry.delete(0,
"end")
10269 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue*100)
10270 if AWGADutyCyclevalue < 0:
10271 AWGADutyCyclevalue = 0
10272 AWGADutyCycleEntry.delete(0,
"end")
10273 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10277 global AWGAShape, AWGAWave, phasealab, duty1lab
10279 if AWGAShape.get() == 0:
10281 duty1lab.config(text=
"%")
10283 if AWGAShape.get() == 1:
10285 duty1lab.config(text=
"%")
10287 if AWGAShape.get() == 2:
10288 AWGAWave =
'triangle'
10289 duty1lab.config(text=
"%")
10291 if AWGAShape.get() == 3:
10292 AWGAWave =
'sawtooth'
10293 duty1lab.config(text=
"%")
10295 if AWGAShape.get() == 4:
10296 AWGAWave =
'square'
10297 duty1lab.config(text=
"%")
10299 if AWGAShape.get() == 5:
10300 AWGAWave =
'stairstep'
10301 duty1lab.config(text=
"%")
10303 if AWGAShape.get() > 5:
10304 AWGAWave =
'arbitrary'
10308 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile
10311 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10312 AWGAcsvFile = filename
10316 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile, AWGAOffsetvalue
10320 CSVFile = open(AWGAcsvFile)
10324 csv_f = csv.reader(CSVFile, csv.excel)
10326 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10334 if len(row) > 1
and ColumnSel == 0:
10335 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
10336 ColumnNum = int(RequestColumn) - 1
10337 ColumnLen = str(len(row))
10342 if colnum == ColumnNum:
10343 AWGAwaveform.append(float(col))
10346 print(
'skipping non-numeric row', RowNum)
10348 AWGAwaveform = numpy.array(AWGAwaveform)
10349 AWGAwaveform = AWGAwaveform + AWGAOffsetvalue
10356 global AWG_2X, AWGA2X, AWGAwaveform
10357 global AWGFiltA, AWGFiltACoef
10360 if AWGFiltA.get() == 1:
10361 BufLen = len(AWGAwaveform)
10362 CoefLen = len(AWGFiltACoef)/2
10363 AWGAwaveform = numpy.pad(AWGAwaveform, (CoefLen,CoefLen),
'wrap')
10364 AWGAwaveform = numpy.convolve(AWGAwaveform, AWGFiltACoef)
10365 AWGAwaveform = numpy.roll(AWGAwaveform, -CoefLen)
10366 AWGAwaveform = AWGAwaveform[CoefLen:BufLen+CoefLen]
10368 if AWG_2X.get() == 1:
10371 AWGA2X = AWGAwaveform[1::2]
10372 Tempwaveform = AWGAwaveform[::2]
10373 AWGAwaveform = Tempwaveform
10376 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10378 if AWGABurstFlag.get() == 1:
10379 AWGACyclesString = askstring(
"AWG A Burst Mode",
"Current number of cycles " + str(AWGACycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGACycles), parent=awgwindow)
10380 if (AWGACyclesString ==
None):
10382 AWGACycles = int(AWGACyclesString)
10383 AWGADelayString = askstring(
"AWG A Burst Mode",
"Current Burst delay " + str(AWGABurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGABurstDelay), parent=awgwindow)
10384 if (AWGADelayString ==
None):
10386 AWGABurstDelay = float(AWGADelayString)
10390 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
10391 global AWG_2X, AWGA2X, AWGAwavFile
10394 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
10395 AWGAwavFile = filename
10399 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
10400 global AWG_2X, AWGA2X, AWGAwavFile
10403 spf = wave.open(AWGAwavFile,
'r')
10405 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10408 Length = spf.getnframes()
10412 if spf.getnchannels() == 2:
10413 showwarning(
"Split Stereo",
"Left to AWGA Right to AWGB", parent=awgwindow)
10414 signal = spf.readframes(Length)
10415 Stereo = numpy.fromstring(signal,
'Int16')
10417 while n < Length*2:
10418 AWGAwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
10420 AWGBwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
10422 AWGAwaveform = numpy.array(AWGAwaveform)
10423 AWGBwaveform = numpy.array(AWGBwaveform)
10424 AWGBShape.set(AWGAShape.get())
10427 signal = spf.readframes(Length)
10428 WAVsignal = numpy.fromstring(signal,
'Int16')
10430 AWGAwaveform = (WAVsignal * 2.5 / 32768) + 2.5
10431 AWGAwaveform = numpy.array(AWGAwaveform)
10437 global AWGAwaveform, AWGALength, awgwindow
10439 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10440 numpy.savetxt(filename, AWGAwaveform, delimiter=
",", fmt=
'%2.4f')
10443 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10444 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
10445 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
10446 global DFiltACoef, DFiltBCoef, AWGAShapeLabel, AWGALength
10447 global AWG_2X, AWGA2X
10449 TempString = AWGAMathString
10450 AWGAShapeLabel.config(text =
"Math" )
10451 AWGAMathString = askstring(
"AWG A Math Formula",
"Current Formula: " + AWGAMathString +
"\n\nNew Formula:\n", initialvalue=AWGAMathString, parent=awgwindow)
10452 if (AWGAMathString ==
None):
10453 AWGAMathString = TempString
10456 AWGAwaveform = eval(AWGAMathString)
10458 showwarning(
"Syntax Error",
"Syntax Error in entered string!", parent=awgwindow)
10459 AWGAwaveform = numpy.array(AWGAwaveform)
10461 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
10465 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10466 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
10467 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
10468 global DFiltACoef, DFiltBCoef, AWGAShapeLabel
10469 global AWG_2X, AWGA2X
10471 AWGAwaveform = eval(AWGAMathString)
10472 AWGAwaveform = numpy.array(AWGAwaveform)
10477 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10478 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10479 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode, AWGRecLength
10480 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10488 if AWGAFreqvalue < 1.53:
10494 if AWGAFreqvalue > 0.0:
10495 if AWG_2X.get() == 1:
10496 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10498 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10500 AWGAperiodvalue = 10.0
10502 if AWGAPhaseDelay.get() == 0:
10503 if AWGAPhasevalue > 0:
10504 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10506 AWGAdelayvalue = 0.0
10507 elif AWGAPhaseDelay.get() == 1:
10508 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
10509 Cycles = int(AWGRecLength/AWGAperiodvalue)
10512 RecLength = int(Cycles * AWGAperiodvalue)
10513 if RecLength % 2 != 0:
10514 RecLength = RecLength + 1
10516 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
10518 if AWG_Amp_Mode.get() == 0:
10519 if AWGAMode.get() == 1:
10520 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10521 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10523 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10524 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10526 if AWGAMode.get() == 1:
10527 amplitude = AWGAAmplvalue/1000.0
10528 offset = AWGAOffsetvalue/1000.0
10530 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10531 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10532 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10533 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10537 duty1lab.config(text=
"%")
10541 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10542 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10543 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
10544 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
10550 duty1lab.config(text =
"M Index")
10551 phasealab.config(text =
"M Freq")
10553 if AWGAFreqvalue > 0.0:
10554 if AWG_2X.get() == 1:
10555 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10557 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10559 AWGAperiodvalue = 10.0
10562 ModFreq = float(eval(AWGAPhaseEntry.get()))
10565 AWGAPhaseEntry.delete(0,
"end")
10566 AWGAPhaseEntry.insert(0, ModFreq)
10570 AWGAPhaseEntry.delete(0,
"end")
10571 AWGAPhaseEntry.insert(0, ModFreq)
10573 if AWG_2X.get() == 1:
10574 MODperiodvalue = (BaseSampleRate*2)/ModFreq
10576 MODperiodvalue = BaseSampleRate/ModFreq
10579 ModIndex = float(eval(AWGADutyCycleEntry.get()))
10582 AWGADutyCycleEntry.delete(0,
"end")
10583 AWGADutyCycleEntry.insert(0, ModIndex)
10585 ModCycles = int(AWGRecLength/MODperiodvalue)
10588 RecLength = int(ModCycles * MODperiodvalue)
10589 if RecLength % 2 != 0:
10590 RecLength = RecLength + 1
10591 CarCycles = int(RecLength/AWGAperiodvalue)
10593 AWGAwaveform = numpy.sin( (numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) - ModIndex*numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)) )
10594 if AWG_Amp_Mode.get() == 0:
10595 if AWGAMode.get() == 1:
10596 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10597 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10599 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10600 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10602 if AWGAMode.get() == 1:
10603 amplitude = AWGAAmplvalue/1000.0
10604 offset = AWGAOffsetvalue/1000.0
10606 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10607 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10608 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10609 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10615 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10616 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
10617 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
10618 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
10624 duty1lab.config(text =
"M Index")
10625 phasealab.config(text =
"M Freq")
10627 if AWGAFreqvalue > 0.0:
10628 if AWG_2X.get() == 1:
10629 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
10631 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10633 AWGAperiodvalue = 10.0
10636 ModFreq = float(eval(AWGAPhaseEntry.get()))
10639 AWGAPhaseEntry.delete(0,
"end")
10640 AWGAPhaseEntry.insert(0, ModFreq)
10644 AWGAPhaseEntry.delete(0,
"end")
10645 AWGAPhaseEntry.insert(0, ModFreq)
10647 if AWG_2X.get() == 1:
10648 MODperiodvalue = (BaseSampleRate*2)/ModFreq
10650 MODperiodvalue = BaseSampleRate/ModFreq
10653 ModIndex = float(eval(AWGADutyCycleEntry.get()))/200.0
10656 AWGADutyCycleEntry.delete(0,
"end")
10657 AWGADutyCycleEntry.insert(0, ModIndex)
10659 ModCycles = int(AWGRecLength/MODperiodvalue)
10662 RecLength = int(ModCycles * MODperiodvalue)
10663 if RecLength % 2 != 0:
10664 RecLength = RecLength + 1
10665 CarCycles = int(RecLength/AWGAperiodvalue)
10667 AWGAwaveform = numpy.sin(numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) * (0.5+(ModIndex*(numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)))))
10668 if AWG_Amp_Mode.get() == 0:
10669 if AWGAMode.get() == 1:
10670 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
10671 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
10673 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
10674 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
10676 if AWGAMode.get() == 1:
10677 amplitude = AWGAAmplvalue/1000.0
10678 offset = AWGAOffsetvalue/1000.0
10680 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10681 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10682 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10683 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10689 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
10690 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
10691 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10692 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10700 if AWGAFreqvalue > 0.0:
10701 if AWG_2X.get() == 1:
10702 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10704 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10706 AWGAperiodvalue = 0.0
10707 if AWG_Amp_Mode.get() == 1:
10708 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10709 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10711 MaxV = AWGAOffsetvalue
10712 MinV = AWGAAmplvalue
10714 PulseWidth = int(AWGADutyCyclevalue*100)
10715 PulseSamples = int(AWGAperiodvalue/PulseWidth)
10717 for i
in range(PulseSamples):
10718 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
10720 for j
in range(PulseWidth):
10722 AWGAwaveform.append(MaxV)
10724 AWGAwaveform.append(MinV)
10726 duty1lab.config(text=
"PWidth")
10730 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
10731 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
10732 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10733 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10740 Max_term = int(AWGADutyCyclevalue*100)
10741 if AWG_2X.get() == 1:
10742 TempRate = (BaseSampleRate*2)
10744 TempRate = BaseSampleRate
10746 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, int(TempRate/AWGAFreqvalue)))
10748 while k <= Max_term:
10750 Harmonic = (math.sin(k*numpy.pi/2.0)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, int(TempRate/AWGAFreqvalue))))
10751 AWGAwaveform = AWGAwaveform + Harmonic
10753 if AWG_Amp_Mode.get() == 0:
10754 amplitude = (AWGAOffsetvalue-AWGAAmplvalue)/2.0
10755 offset = (AWGAOffsetvalue+AWGAAmplvalue)/2.0
10757 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
10758 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
10759 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10761 duty1lab.config(text=
"Harmonics")
10766 global AWGAwaveform, AWGSampleRate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
10767 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay
10768 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10769 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10777 if AWGAFreqvalue > 0.0:
10778 if AWG_2X.get() == 1:
10779 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10780 SamplesPermS = int((BaseSampleRate*2)/1000)
10781 if AWGAperiodvalue % 2 != 0:
10782 AWGAperiodvalue = AWGAperiodvalue + 1
10784 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10785 SamplesPermS = int(BaseSampleRate/1000)
10787 AWGAperiodvalue = 0.0
10788 if AWG_Amp_Mode.get() == 1:
10789 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10790 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10792 MaxV = AWGAOffsetvalue
10793 MinV = AWGAAmplvalue
10795 if AWGAPhaseDelay.get() == 0:
10796 if AWGAPhasevalue > 0:
10797 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10799 AWGAdelayvalue = 0.0
10800 elif AWGAPhaseDelay.get() == 1:
10801 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
10803 Cycles = int(AWGADutyCyclevalue*100)
10804 NCycles = -1 * Cycles
10806 AWGAwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, int(SAMPLErate/AWGAFreqvalue)))
10807 amplitude = (MaxV-MinV) / 2.0
10808 offset = (MaxV+MinV) / 2.0
10809 AWGAwaveform = (AWGAwaveform * amplitude) + offset
10810 Cycles = int(37500/AWGAperiodvalue)
10814 Extend = int((Cycles-1.0)*AWGAperiodvalue/2.0)
10815 AWGAwaveform = numpy.pad(AWGAwaveform, (Extend,Extend),
'wrap')
10816 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10819 duty1lab.config(text=
"Cycles")
10824 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10825 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10826 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10827 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10828 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10836 if AWGAFreqvalue > 0.0:
10837 if AWG_2X.get() == 1:
10838 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10839 SamplesPermS = int((BaseSampleRate*2)/1000)
10840 if AWGAperiodvalue % 2 != 0:
10841 AWGAperiodvalue = AWGAperiodvalue + 1
10843 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10844 SamplesPermS = int(BaseSampleRate/1000)
10846 AWGAperiodvalue = 0.0
10847 if AWG_Amp_Mode.get() == 1:
10848 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10849 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10851 MaxV = AWGAOffsetvalue
10852 MinV = AWGAAmplvalue
10854 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10855 if SlopeValue <= 0:
10857 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10860 Remainder = int((AWGAperiodvalue - PulseWidth - SlopeValue)/2)
10863 PulseWidth = PulseWidth - SlopeValue
10866 StepAmp = (MaxV - MinV)/2
10867 StepOff = (MaxV + MinV)/2
10868 AWGAwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
10869 MidArray = numpy.ones(PulseWidth) * MinV
10870 AWGAwaveform = numpy.insert(AWGAwaveform, SlopeValue, MidArray)
10871 AWGAwaveform = numpy.pad(AWGAwaveform, (Remainder, Remainder),
'edge')
10872 if AWGABurstFlag.get() == 1:
10873 TempOneCycle = AWGAwaveform
10874 for i
in range(AWGACycles-1):
10875 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10876 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
10877 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
10879 duty1lab.config(text=
"%")
10880 phasealab.config(text =
"Rise Time")
10884 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10885 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10886 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10887 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10888 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10896 if AWGAFreqvalue > 0.0:
10897 if AWG_2X.get() == 1:
10898 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10899 SamplesPermS = int((BaseSampleRate*2)/1000)
10900 if AWGAperiodvalue % 2 != 0:
10901 AWGAperiodvalue = AWGAperiodvalue + 1
10903 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10904 SamplesPermS = int(BaseSampleRate/1000)
10906 AWGAperiodvalue = 0.0
10907 if AWG_Amp_Mode.get() == 1:
10908 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10909 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10911 MaxV = AWGAOffsetvalue
10912 MinV = AWGAAmplvalue
10914 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10915 if SlopeValue <= 0:
10917 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10920 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
10923 PulseWidth = PulseWidth - SlopeValue
10926 StepValue = (MaxV - MinV) / SlopeValue
10928 for i
in range(SlopeValue):
10929 AWGAwaveform.append(SampleValue)
10930 SampleValue = SampleValue + StepValue
10931 for i
in range(PulseWidth):
10932 AWGAwaveform.append(MaxV)
10933 for i
in range(SlopeValue):
10934 AWGAwaveform.append(SampleValue)
10935 SampleValue = SampleValue - StepValue
10936 for i
in range(Remainder):
10937 AWGAwaveform.append(MinV)
10938 if AWGABurstFlag.get() == 1:
10939 TempOneCycle = AWGAwaveform
10940 for i
in range(AWGACycles-1):
10941 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10942 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
10943 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
10945 duty1lab.config(text=
"%")
10946 phasealab.config(text =
"Rise Time")
10950 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
10951 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10952 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10953 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10954 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10962 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
10964 AWGADutyCycleEntry.delete(0,
"end")
10965 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
10967 if AWGAFreqvalue > 0.0:
10968 if AWG_2X.get() == 1:
10969 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10970 SamplesPermS = int((BaseSampleRate*2)/1000)
10971 if AWGAperiodvalue % 2 != 0:
10972 AWGAperiodvalue = AWGAperiodvalue + 1
10974 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10975 SamplesPermS = int(BaseSampleRate/1000)
10977 AWGAperiodvalue = 0.0
10978 if AWG_Amp_Mode.get() == 1:
10979 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10980 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10982 MaxV = AWGAOffsetvalue
10983 MinV = AWGAAmplvalue
10985 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10986 if SlopeValue <= 0:
10988 PulseWidth = int(AWGADutyCyclevalue*SamplesPermS)
10991 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
10994 PulseWidth = PulseWidth - SlopeValue
10997 StepValue = (MaxV - MinV) / SlopeValue
10999 for i
in range(SlopeValue):
11000 AWGAwaveform.append(SampleValue)
11001 SampleValue = SampleValue + StepValue
11002 for i
in range(PulseWidth):
11003 AWGAwaveform.append(MaxV)
11004 for i
in range(SlopeValue):
11005 AWGAwaveform.append(SampleValue)
11006 SampleValue = SampleValue - StepValue
11007 for i
in range(Remainder):
11008 AWGAwaveform.append(MinV)
11009 if AWGABurstFlag.get() == 1:
11010 TempOneCycle = AWGAwaveform
11011 for i
in range(AWGACycles-1):
11012 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11013 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
11014 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
11016 duty1lab.config(text=
"Width mS")
11017 phasealab.config(text =
"Rise Time")
11021 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
11022 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
11023 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11024 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11025 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11033 if AWGAFreqvalue > 0.0:
11034 if AWG_2X.get() == 1:
11035 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11036 SamplesPermS = int((BaseSampleRate*2)/1000)
11037 if AWGAperiodvalue % 2 != 0:
11038 AWGAperiodvalue = AWGAperiodvalue + 1
11040 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11041 SamplesPermS = int(BaseSampleRate/1000)
11043 AWGAperiodvalue = 0.0
11044 if AWG_Amp_Mode.get() == 1:
11045 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11046 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11048 MaxV = AWGAOffsetvalue
11049 MinV = AWGAAmplvalue
11051 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
11052 if SlopeValue <= 0:
11054 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
11057 Remainder = int(AWGAperiodvalue - PulseWidth)
11060 PulseWidth = PulseWidth - SlopeValue
11063 StepValue = (MaxV - MinV) / SlopeValue
11065 for i
in range(SlopeValue):
11066 AWGAwaveform.append(SampleValue)
11067 SampleValue = SampleValue + StepValue
11068 for i
in range(PulseWidth):
11069 AWGAwaveform.append(MaxV)
11070 for i
in range(Remainder):
11071 AWGAwaveform.append(MinV)
11072 if AWGABurstFlag.get() == 1:
11073 TempOneCycle = AWGAwaveform
11074 for i
in range(AWGACycles-1):
11075 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11076 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
11077 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
11079 duty1lab.config(text=
"%")
11080 phasealab.config(text =
"Slope Time")
11084 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, duty1lab
11085 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
11086 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11087 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11088 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11096 if AWGAFreqvalue > 0.0:
11097 if AWG_2X.get() == 1:
11098 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11099 SamplesPermS = int((BaseSampleRate*2)/1000)
11100 if AWGAperiodvalue % 2 != 0:
11101 AWGAperiodvalue = AWGAperiodvalue + 1
11103 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
11104 SamplesPermS = int(BaseSampleRate/1000)
11106 AWGAperiodvalue = 0.0
11107 if AWG_Amp_Mode.get() == 1:
11108 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11109 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11111 MaxV = AWGAOffsetvalue
11112 MinV = AWGAAmplvalue
11114 if AWGAPhaseDelay.get() == 0:
11115 if AWGAPhasevalue > 0:
11116 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
11118 AWGAdelayvalue = 0.0
11119 elif AWGAPhaseDelay.get() == 1:
11120 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
11123 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
11126 Remainder = int(AWGAperiodvalue - PulseWidth)
11129 UpStepValue = (MaxV - MinV) / PulseWidth
11130 DownStepValue = (MaxV - MinV) / Remainder
11132 for i
in range(PulseWidth):
11133 AWGAwaveform.append(SampleValue)
11134 SampleValue = SampleValue + UpStepValue
11135 for i
in range(Remainder):
11136 AWGAwaveform.append(SampleValue)
11137 SampleValue = SampleValue - DownStepValue
11138 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
11139 if AWGABurstFlag.get() == 1:
11140 TempOneCycle = AWGAwaveform
11141 for i
in range(AWGACycles-1):
11142 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11143 TempDelay = int(AWGABurstDelay*SamplesPermS)
11144 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
11147 duty1lab.config(text =
"Symmetry")
11152 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, AWG_Amp_Mode
11153 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue
11154 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11155 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11156 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11164 if AWGAFreqvalue > 0.0:
11165 if AWG_2X.get() == 1:
11166 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11167 SamplesPermS = int((BaseSampleRate*2)/1000)
11168 if AWGAperiodvalue % 2 != 0:
11169 AWGAperiodvalue = AWGAperiodvalue + 1
11171 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11172 SamplesPermS = int(BaseSampleRate/1000)
11174 AWGAperiodvalue = 0.0
11175 if AWG_Amp_Mode.get() == 1:
11176 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11177 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11179 MaxV = AWGAOffsetvalue
11180 MinV = AWGAAmplvalue
11182 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue / 2.0)
11183 if AWGAPhaseDelay.get() == 0:
11184 DelayValue = int(AWGAperiodvalue*(AWGAPhasevalue/360))
11185 elif AWGAPhaseDelay.get() == 1:
11186 DelayValue = int(AWGAPhasevalue*SamplesPermS)
11187 for i
in range(DelayValue-PulseWidth):
11188 AWGAwaveform.append((MinV+MaxV)/2.0)
11189 for i
in range(PulseWidth):
11190 AWGAwaveform.append(MaxV)
11191 for i
in range(PulseWidth):
11192 AWGAwaveform.append(MinV)
11193 DelayValue = int(AWGAperiodvalue-DelayValue)
11194 for i
in range(DelayValue-PulseWidth):
11195 AWGAwaveform.append((MinV+MaxV)/2.0)
11196 if AWGABurstFlag.get() == 1:
11197 TempOneCycle = AWGAwaveform
11198 for i
in range(AWGACycles-1):
11199 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11200 TempDelay = int(AWGABurstDelay*SamplesPermS)
11201 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
11203 duty1lab.config(text =
"Duty Cycle")
11208 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
11209 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
11210 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11211 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11212 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11218 if AWGAFreqvalue > 0.0:
11219 if AWG_2X.get() == 1:
11220 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11221 SamplesPermS = int((BaseSampleRate*2)/1000)
11222 if AWGAperiodvalue % 2 != 0:
11223 AWGAperiodvalue = AWGAperiodvalue + 1
11225 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11226 SamplesPermS = int(BaseSampleRate/1000)
11228 AWGAperiodvalue = 0.0
11229 if AWG_Amp_Mode.get() == 1:
11230 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11231 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11233 if AWGAAmplvalue > AWGAOffsetvalue:
11234 MinV = AWGAOffsetvalue
11235 MaxV = AWGAAmplvalue
11237 MaxV = AWGAOffsetvalue
11238 MinV = AWGAAmplvalue
11240 AWGAwaveform = numpy.random.uniform(MinV, MaxV, int(AWGAperiodvalue))
11241 Mid = (MaxV+MinV)/2.0
11242 if AWGABurstFlag.get() == 1:
11243 TempOneCycle = AWGAwaveform
11244 for i
in range(AWGACycles-1):
11245 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11246 TempDelay = int(AWGABurstDelay*SamplesPermS)
11247 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11253 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
11254 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
11255 global AWGABurstFlag, AWGACycles, AWGABurstDelay
11256 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
11257 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11263 if AWGAFreqvalue > 0.0:
11264 if AWG_2X.get() == 1:
11265 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
11266 SamplesPermS = int((BaseSampleRate*2)/1000)
11267 if AWGAperiodvalue % 2 != 0:
11268 AWGAperiodvalue = AWGAperiodvalue + 1
11270 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
11271 SamplesPermS = int(BaseSampleRate/1000)
11273 AWGAperiodvalue = 0.0
11274 if AWG_Amp_Mode.get() == 1:
11275 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11276 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11278 if AWGAAmplvalue > AWGAOffsetvalue:
11279 MinV = AWGAOffsetvalue
11280 MaxV = AWGAAmplvalue
11282 MaxV = AWGAOffsetvalue
11283 MinV = AWGAAmplvalue
11285 AWGAwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGAperiodvalue))
11286 Mid = (MaxV+MinV)/2.0
11287 if AWGABurstFlag.get() == 1:
11288 TempOneCycle = AWGAwaveform
11289 for i
in range(AWGACycles-1):
11290 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
11291 TempDelay = int(AWGABurstDelay*SamplesPermS)
11292 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11298 global AWGAMode, AWGAIOMode, AWGAModeLabel, DevID, session, devx, DevOne, CHA, HWRevOne
11299 global EnableScopeOnly, AWG_Amp_Mode
11301 if AWGAMode.get() == 0:
11303 elif AWGAMode.get() == 1:
11305 elif AWGAMode.get() == 2:
11307 if AWGAIOMode.get() > 0:
11308 if HWRevOne ==
"D":
11309 if AWGAMode.get() == 0:
11313 label_txt = label_txt +
" Split I/O"
11314 if EnableScopeOnly == 0:
11315 label_txt = label_txt +
" Mode"
11316 AWGAModeLabel.config(text = label_txt )
11321 global AWGAAmplvalue, AWGAOffsetvalue, EnableScopeOnly
11322 global AWGAFreqvalue, AWGAPhasevalue, AWGAPhaseDelay
11323 global AWGADutyCyclevalue, FSweepMode, AWGARepeatFlag, AWGSync
11324 global AWGAWave, AWGAMode, AWGATerm, AWGAwaveform, AWGAIOMode
11325 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne, AWG_Amp_Mode
11326 global amp1lab, off1lab, AWGA2X, AWGA2X, AWGBWave, AWGBRepeatFlag
11327 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11336 if AWG_Amp_Mode.get() == 0:
11337 amp1lab.config(text =
"Min Ch A" )
11338 off1lab.config(text =
"Max Ch A" )
11340 amp1lab.config(text =
"Amp Ch A" )
11341 off1lab.config(text =
"Off Ch A" )
11343 if AWGAFreqvalue > 0.0:
11344 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
11346 AWGAperiodvalue = 0.0
11348 if AWGAPhaseDelay.get() == 0:
11349 if AWGAWave ==
'square':
11350 AWGAPhasevalue = AWGAPhasevalue + 270.0
11351 if AWGAPhasevalue > 359:
11352 AWGAPhasevalue = AWGAPhasevalue - 360
11353 if AWGAPhasevalue > 0:
11354 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
11356 AWGAdelayvalue = 0.0
11357 elif AWGAPhaseDelay.get() == 1:
11358 AWGAdelayvalue = AWGAPhasevalue * 100
11360 if AWGATerm.get() == 0:
11361 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
11362 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
11363 elif AWGATerm.get() == 1:
11364 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
11365 devx.ctrl_transfer( 0x40, 0x50, 33, 0, 0, 0, 100)
11366 elif AWGATerm.get() == 2:
11367 devx.ctrl_transfer( 0x40, 0x50, 32, 0, 0, 0, 100)
11368 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
11370 if AWGAWave ==
'dc':
11371 if AWG_2X.get() == 2:
11372 AWGAWave ==
'arbitrary'
11373 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
11375 if AWGAMode.get() == 0:
11376 if AWGAIOMode.get() == 0:
11377 CHA.mode = Mode.SVMI
11379 CHA.mode = Mode.SVMI_SPLIT
11380 CHA.constant(AWGAOffsetvalue)
11382 if AWGAMode.get() == 1:
11383 if AWGAIOMode.get() == 0:
11384 CHA.mode = Mode.SIMV
11386 CHA.mode = Mode.SIMV_SPLIT
11387 CHA.constant(AWGAOffsetvalue/1000)
11389 if AWGAMode.get() == 2:
11390 if AWGAIOMode.get() == 0:
11391 CHA.mode = Mode.HI_Z
11393 CHA.mode = Mode.HI_Z_SPLIT
11395 if AWGAIOMode.get() > 0:
11396 if HWRevOne ==
"D":
11398 CHA.mode = Mode.SIMV_SPLIT
11401 if AWGAMode.get() == 0:
11402 if AWGAIOMode.get() == 0:
11403 CHA.mode = Mode.SVMI
11405 CHA.mode = Mode.SVMI_SPLIT
11406 if AWGAMode.get() == 1:
11407 if AWGAIOMode.get() == 0:
11408 CHA.mode = Mode.SIMV
11410 CHA.mode = Mode.SIMV_SPLIT
11411 AWGAOffsetvalue = AWGAOffsetvalue/1000
11412 AWGAAmplvalue = AWGAAmplvalue/1000
11413 if AWGAMode.get() == 2:
11414 if AWGAIOMode.get() == 0:
11415 CHA.mode = Mode.HI_Z
11417 CHA.mode = Mode.HI_Z_SPLIT
11419 if AWG_Amp_Mode.get() == 1:
11420 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
11421 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
11423 MaxV = AWGAOffsetvalue
11424 MinV = AWGAAmplvalue
11426 if AWGAWave ==
'sine':
11427 CHA.sine(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11428 elif AWGAWave ==
'triangle':
11429 CHA.triangle(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11430 elif AWGAWave ==
'sawtooth':
11431 CHA.sawtooth(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11432 elif AWGAWave ==
'square':
11433 CHA.square(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue, AWGADutyCyclevalue)
11434 elif AWGAWave ==
'stairstep':
11435 CHA.stairstep(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
11436 elif AWGAWave ==
'arbitrary':
11437 if EnableScopeOnly == 0:
11439 if AWGSync.get() == 0:
11440 AWGARepeatFlag.set(1)
11441 if AWG_2X.get() == 2:
11442 AWGAWave ==
'arbitrary'
11443 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
11445 CHA.arbitrary(AWGAwaveform, AWGARepeatFlag.get())
11448 if AWGAIOMode.get() > 0:
11449 if HWRevOne ==
"D":
11451 CHA.mode = Mode.SIMV_SPLIT
11454 global AWG_2X, AWGB2X, AWGAwaveform
11455 global AWGANoiseEntry, AWGAsbnoise, AWGANoisevalue
11457 if AWGAsbnoise.get() ==
"None":
11461 AWGANoisevalue = float(eval(AWGANoiseEntry.get()))
11463 AWGANoiseEntry.delete(0,
"end")
11464 AWGANoiseEntry.insert(0, AWGANoisevalue)
11465 if AWGANoisevalue == 0.0:
11468 if AWGAsbnoise.get() ==
"Gaussian":
11469 AWGANoiseform = numpy.random.normal(0.0, abs((AWGANoisevalue)/3), len(AWGAwaveform))
11471 AWGANoiseform = numpy.random.uniform((-AWGANoisevalue)/2, (AWGANoisevalue)/2, len(AWGAwaveform))
11472 AWGAwaveform = AWGAwaveform + AWGANoiseform
11473 if AWG_2X.get() == 2:
11474 if AWGAsbnoise.get() ==
"Gaussian":
11475 AWGANoiseform = numpy.random.normal(0.0, abs((AWGANoisevalue)/3), len(AWGB2X))
11477 AWGANoiseform = numpy.random.uniform((-AWGANoisevalue)/2, (AWGANoisevalue)/2, len(AWGB2X))
11478 AWGB2X = AWGB2X + AWGANoiseform
11481 global AWGAAmplEntry, AWGBAmplEntry, AWGAOffsetEntry, AWGBOffsetEntry, AWGAFreqEntry, AWGBFreqEntry
11482 global AWGAPhaseEntry, AWGBPhaseEntry, AWGADutyCycleEntry, AWGBDutyCycleEntry, AWGAShape, AWGBShape
11483 global BisCompA, AWGAWave
11487 if AWGAWave ==
'dc':
11488 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
11489 AWGBOffsetvalue = 2.5 - (float(eval(AWGAOffsetEntry.get()))-2.5)
11490 AWGBAmplEntry.delete(0,
"end")
11491 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11492 AWGBOffsetEntry.delete(0,
"end")
11493 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11495 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
11496 AWGBOffsetvalue = float(eval(AWGAOffsetEntry.get()))
11497 AWGBAmplEntry.delete(0,
"end")
11498 AWGBAmplEntry.insert(0, AWGBOffsetvalue)
11499 AWGBOffsetEntry.delete(0,
"end")
11500 AWGBOffsetEntry.insert(0, AWGBAmplvalue)
11502 AWGBFreqvalue = float(eval(AWGAFreqEntry.get()))
11503 AWGBFreqEntry.delete(0,
"end")
11504 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11505 AWGBPhasevalue = float(eval(AWGAPhaseEntry.get()))
11506 AWGBPhaseEntry.delete(0,
"end")
11507 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11508 AWGBDutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
11509 AWGBDutyCycleEntry.delete(0,
"end")
11510 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11511 AWGBShape.set(AWGAShape.get())
11518 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11520 if AWGBBurstFlag.get() == 1:
11521 AWGBCyclesString = askstring(
"AWG B Burst Mode",
"Current number of cycles " + str(AWGBCycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGBCycles), parent=awgwindow)
11522 if (AWGBCyclesString ==
None):
11524 AWGBCycles = int(AWGBCyclesString)
11525 AWGBDelayString = askstring(
"AWG B Burst Mode",
"Current Burst delay " + str(AWGBBurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGBBurstDelay), parent=awgwindow)
11526 if (AWGBDelayString ==
None):
11528 AWGBBurstDelay = float(AWGBDelayString)
11532 global AWGBAmplEntry, AWGBAmplvalue, AWGBMode, AWG_Amp_Mode
11533 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11536 AWGBAmplvalue = float(eval(AWGBAmplEntry.get()))
11538 AWGBAmplEntry.delete(0,
"end")
11539 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11541 if AWGBMode.get() == 0:
11542 if AWG_Amp_Mode.get() == 0:
11543 if AWGBAmplvalue > 5.00:
11544 AWGBAmplvalue = 5.00
11545 AWGBAmplEntry.delete(0,
"end")
11546 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11547 if AWGBAmplvalue < 0.00:
11548 AWGBAmplvalue = 0.00
11549 AWGBAmplEntry.delete(0,
"end")
11550 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11551 elif AWG_Amp_Mode.get() == 1:
11552 if AWGBAmplvalue > (2.5 / AWGB_Ext_Gain.get()):
11553 AWGBAmplvalue = 2.5 / AWGB_Ext_Gain.get()
11554 AWGBAmplEntry.delete(0,
"end")
11555 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11556 if AWGBAmplvalue < (-2.50 / AWGB_Ext_Gain.get()):
11557 AWGBAmplvalue = -2.50 / AWGB_Ext_Gain.get()
11558 AWGBAmplEntry.delete(0,
"end")
11559 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11560 elif AWGBMode.get() == 1:
11561 if AWGBAmplvalue > 200.00:
11562 AWGBAmplvalue = 200.00
11563 AWGBAmplEntry.delete(0,
"end")
11564 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11565 if AWGBAmplvalue < -200.00:
11566 AWGBAmplvalue = -200.00
11567 AWGBAmplEntry.delete(0,
"end")
11568 AWGBAmplEntry.insert(0, AWGBAmplvalue)
11571 global AWGBOffsetEntry, AWGBOffsetvalue, AWGBMode, AWG_Amp_Mode
11572 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11575 AWGBOffsetvalue = float(eval(AWGBOffsetEntry.get()))
11577 AWGBOffsetEntry.delete(0,
"end")
11578 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11579 if AWG_Amp_Mode.get() == 0:
11580 if AWGBMode.get() == 0:
11581 if AWGBOffsetvalue > 5.00:
11582 AWGBOffsetvalue = 5.00
11583 AWGBOffsetEntry.delete(0,
"end")
11584 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11585 if AWGBOffsetvalue < 0.00:
11586 AWGBOffsetvalue = 0.00
11587 AWGBOffsetEntry.delete(0,
"end")
11588 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11589 elif AWG_Amp_Mode.get() == 1:
11590 if AWGBOffsetvalue > (2.50-AWGB_Ext_Offset.get()):
11591 AWGBOffsetvalue = 2.50-AWGB_Ext_Offset.get()
11592 AWGBOffsetEntry.delete(0,
"end")
11593 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11594 if AWGBOffsetvalue < (-2.50-AWGB_Ext_Offset.get()):
11595 AWGBOffsetvalue = -2.50-AWGB_Ext_Offset.get()
11596 AWGBOffsetEntry.delete(0,
"end")
11597 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11598 if AWGBMode.get() == 1:
11599 if AWGBOffsetvalue > 200.00:
11600 AWGBOffsetvalue = 200.00
11601 AWGBOffsetEntry.delete(0,
"end")
11602 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11603 if AWGBOffsetvalue < -200.00:
11604 AWGBOffsetvalue = -200.00
11605 AWGBOffsetEntry.delete(0,
"end")
11606 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
11609 global AWGBFreqEntry, AWGBFreqvalue, AWG_2X
11610 global BodeScreenStatus, BodeDisp, AWGRecLength
11613 AWGBFreqvalue = float(eval(AWGBFreqEntry.get()))
11615 AWGBFreqEntry.delete(0,
"end")
11616 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11617 if AWG_2X.get() == 2:
11618 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
11619 if AWGBFreqvalue > 90000:
11620 AWGBFreqvalue = 90000
11621 AWGBFreqEntry.delete(0,
"end")
11622 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11624 if AWGBFreqvalue > 50000:
11625 AWGBFreqvalue = 50000
11626 AWGBFreqEntry.delete(0,
"end")
11627 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11629 if AWGBFreqvalue > 25000:
11630 AWGBFreqvalue = 25000
11631 AWGBFreqEntry.delete(0,
"end")
11632 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11633 if AWGBFreqvalue < 4.0:
11634 AWGRecLength = 32768*2
11636 AWGRecLength = 32768
11637 if AWGBFreqvalue < 0:
11639 AWGBFreqEntry.delete(0,
"end")
11640 AWGBFreqEntry.insert(0, AWGBFreqvalue)
11644 global AWGBPhaseDelay, phaseblab, awgbph, awgbdel
11646 if AWGBPhaseDelay.get() == 1:
11647 AWGBPhaseDelay.set(0)
11648 awgbph.configure(text=
"Phase")
11649 phaseblab.configure(text=
"Deg")
11650 elif AWGBPhaseDelay.get() == 0:
11651 AWGBPhaseDelay.set(1)
11652 awgbph.configure(text=
"Delay")
11653 phaseblab.configure(text=
"mSec")
11656 global AWGBPhaseDelay, phaseblab, awgbph, awgbdel
11658 if AWGBPhaseDelay.get() == 0:
11659 phaseblab.configure(text=
"Deg")
11660 awgbph.configure(text=
"Phase")
11661 elif AWGBPhaseDelay.get() == 1:
11662 phaseblab.configure(text=
"mSec")
11663 awgbph.configure(text=
"Delay")
11666 global AWGBPhaseEntry, AWGBPhasevalue
11669 AWGBPhasevalue = float(eval(AWGBPhaseEntry.get()))
11671 AWGBPhaseEntry.delete(0,
"end")
11672 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11674 if AWGBPhasevalue > 360:
11675 AWGBPhasevalue = 360
11676 AWGBPhaseEntry.delete(0,
"end")
11677 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11678 if AWGBPhasevalue < 0:
11680 AWGBPhaseEntry.delete(0,
"end")
11681 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
11684 global AWGBDutyCycleEntry, AWGBDutyCyclevalue
11687 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))/100
11689 AWGBDutyCycleEntry.delete(0,
"end")
11690 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11692 if AWGBDutyCyclevalue > 1:
11693 AWGBDutyCyclevalue = 1
11694 AWGBDutyCycleEntry.delete(0,
"end")
11695 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue*100)
11696 if AWGBDutyCyclevalue < 0:
11697 AWGBDutyCyclevalue = 0
11698 AWGBDutyCycleEntry.delete(0,
"end")
11699 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11703 global AWGBShape, AWGBWave, duty2lab, AWG_2X, CHA, CHB
11705 if AWGBShape.get() == 0:
11707 duty2lab.config(text=
"%")
11709 if AWGBShape.get() == 1:
11711 duty2lab.config(text=
"%")
11713 if AWGBShape.get() == 2:
11714 AWGBWave =
'triangle'
11715 duty2lab.config(text=
"%")
11717 if AWGBShape.get() == 3:
11718 AWGBWave =
'sawtooth'
11719 duty2lab.config(text=
"%")
11721 if AWGBShape.get() == 4:
11722 AWGBWave =
'square'
11723 duty2lab.config(text=
"%")
11725 if AWGBShape.get() == 5:
11726 AWGBWave =
'stairstep'
11727 duty2lab.config(text=
"%")
11729 if AWGBShape.get() > 5:
11730 AWGBWave =
'arbitrary'
11731 if AWG_2X.get() == 1:
11732 CHB.mode = CHA.mode
11733 AWGBWave =
'arbitrary'
11737 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile
11740 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
11741 AWGBcsvFile = filename
11745 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile, AWGBOffsetvalue
11749 CSVFile = open(AWGBcsvFile)
11753 csv_f = csv.reader(CSVFile, csv.excel)
11755 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
11761 if len(row) > 1
and ColumnSel == 0:
11762 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
11763 ColumnNum = int(RequestColumn) - 1
11764 ColumnLen = str(len(row))
11769 if colnum == ColumnNum:
11770 AWGBwaveform.append(float(col))
11773 print(
'skipping non-numeric row', RowNum)
11775 AWGBwaveform = numpy.array(AWGBwaveform)
11776 AWGBwaveform = AWGBwaveform + AWGBOffsetvalue
11783 global AWG_2X, AWGB2X, AWGBwaveform
11784 global AWGFiltB, AWGFiltBCoef
11787 if AWGFiltB.get() == 1:
11788 BufLen = len(AWGBwaveform)
11789 CoefLen = len(AWGFiltBCoef)/2
11790 AWGBwaveform = numpy.pad(AWGBwaveform, (CoefLen,CoefLen),
'wrap')
11791 AWGBwaveform = numpy.convolve(AWGBwaveform, AWGFiltBCoef)
11792 AWGBwaveform = numpy.roll(AWGBwaveform, -CoefLen)
11793 AWGBwaveform = AWGBwaveform[CoefLen:BufLen+CoefLen]
11795 if AWG_2X.get() == 2:
11798 AWGB2X = AWGBwaveform[::2]
11799 Tempwaveform = AWGBwaveform[1::2]
11800 AWGBwaveform = Tempwaveform
11803 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
11804 global AWG_2X, AWGA2X
11807 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
11808 AWGBwavFile = filename
11812 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
11813 global AWG_2X, AWGA2X
11816 spf = wave.open(AWGBwavFile,
'r')
11818 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
11821 if spf.getnchannels() == 2:
11822 showwarning(
"WARNING",
"Only mono files supported!", parent=awgwindow)
11825 Length = spf.getnframes()
11828 signal = spf.readframes(Length)
11829 WAVsignal = numpy.fromstring(signal,
'Int16')
11831 AWGBwaveform = (WAVsignal * 2.5 / 32768) + 2.5
11832 AWGBwaveform = numpy.array(AWGBwaveform)
11838 global AWGBwaveform, AWGBLength, awgwindow
11840 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
11841 numpy.savetxt(filename, AWGBwaveform, delimiter=
",", fmt=
'%2.4f')
11844 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
11845 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
11846 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
11847 global DFiltACoef, DFiltBCoef, AWGBShapeLabel, AWGBLength
11848 global AWG_2X, AWGA2X
11850 TempString = AWGBMathString
11851 AWGBShapeLabel.config(text =
"Math" )
11852 AWGBMathString = askstring(
"AWG B Math Formula",
"Current Formula: " + AWGBMathString +
"\n\nNew Formula:\n", initialvalue=AWGBMathString, parent=awgwindow)
11853 if (AWGBMathString ==
None):
11854 AWGBMathString = TempString
11857 AWGBwaveform = eval(AWGBMathString)
11859 showwarning(
"Syntax Error",
"Syntax Error in entered string!", parent=awgwindow)
11860 AWGBwaveform = numpy.array(AWGBwaveform)
11862 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11866 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
11867 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
11868 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
11869 global DFiltACoef, DFiltBCoef, AWGBShapeLabel
11870 global AWG_2X, AWGA2X
11872 AWGBwaveform = eval(AWGBMathString)
11873 AWGBwaveform = numpy.array(AWGBwaveform)
11878 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBFreqvalue, awgwindow
11879 global AWG_Amp_Mode
11880 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, duty2lab
11881 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11883 Max_term = int(AWGBDutyCyclevalue*100)
11888 if AWG_2X.get() == 1:
11889 TempRate = (BaseSampleRate*2)
11891 TempRate = BaseSampleRate
11893 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, int(TempRate/AWGBFreqvalue)))
11895 while k <= Max_term:
11897 Harmonic = (math.sin(k*numpy.pi/2)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, int(TempRate/AWGBFreqvalue))))
11898 AWGBwaveform = AWGBwaveform + Harmonic
11900 if AWG_Amp_Mode.get() == 0:
11901 amplitude = (AWGBOffsetvalue-AWGBAmplvalue)/2
11902 offset = (AWGBOffsetvalue+AWGBAmplvalue)/2
11904 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
11905 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
11906 AWGBwaveform = (AWGBwaveform * amplitude) + offset
11908 duty2lab.config(text=
"Harmonics")
11913 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
11914 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay, AWGBMode
11915 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
11916 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset, AWGRecLength
11924 if AWGBFreqvalue < 1.53 :
11930 if AWGBFreqvalue > 0.0:
11931 if AWG_2X.get() == 2:
11932 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11934 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11936 AWGBperiodvalue = 10.0
11938 if AWGBPhaseDelay.get() == 0:
11939 if AWGBPhasevalue > 0:
11940 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
11942 AWGBdelayvalue = 0.0
11943 elif AWGBPhaseDelay.get() == 1:
11944 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
11945 Cycles = int(AWGRecLength/AWGBperiodvalue)
11948 RecLength = int(Cycles * AWGBperiodvalue)
11949 if RecLength % 2 != 0:
11950 RecLength = RecLength + 1
11952 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
11954 if AWG_Amp_Mode.get() == 0:
11955 if AWGBMode.get() == 1:
11956 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2000.0
11957 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2000.0
11959 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2.0
11960 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2.0
11962 if AWGBMode.get() == 1:
11963 amplitude = AWGBAmplvalue/1000.0
11964 offset = AWGBOffsetvalue/1000.0
11966 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
11967 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
11968 AWGBwaveform = (AWGBwaveform * amplitude) + offset
11969 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
11971 if AWG_2X.get() == 2:
11974 AWGB2X = AWGBwaveform[::2]
11975 Tempwaveform = AWGBwaveform[1::2]
11976 AWGBwaveform = Tempwaveform
11978 duty2lab.config(text=
"%")
11982 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength
11983 global AWGBDutyCyclevalue, AWGBFreqvalue, AWG_Amp_Mode
11984 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11985 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11993 if AWGBFreqvalue > 0.0:
11994 if AWG_2X.get() == 2:
11995 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11997 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11999 AWGBperiodvalue = 0.0
12000 if AWG_Amp_Mode.get() == 1:
12001 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12002 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12004 MaxV = AWGBOffsetvalue
12005 MinV = AWGBAmplvalue
12007 PulseWidth = int(AWGBDutyCyclevalue*100)
12008 PulseSamples = int(AWGBperiodvalue/PulseWidth)
12010 for i
in range(PulseSamples):
12011 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
12013 for j
in range(PulseWidth):
12015 AWGBwaveform.append(MaxV)
12017 AWGBwaveform.append(MinV)
12019 duty2lab.config(text=
"PWidth")
12023 global AWGBwaveform, AWGSampleRate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
12024 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay
12025 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
12026 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12034 if AWGBFreqvalue > 0.0:
12035 if AWG_2X.get() == 1:
12036 AWGBperiodvalue = int((BaseSampleRate*2)/AWGBFreqvalue)
12037 if AWGBperiodvalue % 2 != 0:
12038 AWGBperiodvalue = AWGBperiodvalue + 1
12040 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12042 AWGBperiodvalue = 0.0
12043 if AWG_Amp_Mode.get() == 1:
12044 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12045 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12047 MaxV = AWGBOffsetvalue
12048 MinV = AWGBAmplvalue
12050 if AWGBPhaseDelay.get() == 0:
12051 if AWGBPhasevalue > 0:
12052 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12054 AWGBdelayvalue = 0.0
12055 elif AWGBPhaseDelay.get() == 1:
12056 AWGBdelayvalue = AWGBPhasevalue * SAMPLErate / 1000
12058 Cycles = int(AWGBDutyCyclevalue*100)
12059 NCycles = -1 * Cycles
12061 AWGBwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, int(SAMPLErate/AWGBFreqvalue)))
12062 amplitude = (MaxV-MinV) / 2.0
12063 offset = (MaxV+MinV) / 2.0
12064 AWGBwaveform = (AWGBwaveform * amplitude) + offset
12065 Cycles = int(37500/AWGBperiodvalue)
12069 Extend = int((Cycles-1.0)*AWGBperiodvalue/2.0)
12070 AWGBwaveform = numpy.pad(AWGBwaveform, (Extend,Extend),
'wrap')
12071 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
12073 duty2lab.config(text=
"Cycles")
12078 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12079 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12080 global AWG_Amp_Mode
12081 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12082 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12083 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12091 if AWGBFreqvalue > 0.0:
12092 if AWG_2X.get() == 2:
12093 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12094 SamplesPermS = int((BaseSampleRate*2)/1000)
12096 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12097 SamplesPermS = int(BaseSampleRate/1000)
12099 AWGBperiodvalue = 0.0
12100 if AWG_Amp_Mode.get() == 1:
12101 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12102 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12104 MaxV = AWGBOffsetvalue
12105 MinV = AWGBAmplvalue
12107 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12108 if SlopeValue <= 0:
12110 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12113 Remainder = int((AWGBperiodvalue - PulseWidth - SlopeValue)/2)
12116 PulseWidth = PulseWidth - SlopeValue
12119 StepAmp = (MaxV - MinV)/2
12120 StepOff = (MaxV + MinV)/2
12121 AWGBwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
12122 MidArray = numpy.ones(PulseWidth) * MinV
12123 AWGBwaveform = numpy.insert(AWGBwaveform, SlopeValue, MidArray)
12124 AWGBwaveform = numpy.pad(AWGBwaveform, (Remainder, Remainder),
'edge')
12125 if AWGBBurstFlag.get() == 1:
12126 TempOneCycle = AWGBwaveform
12127 for i
in range(AWGBCycles-1):
12128 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12129 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12130 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12132 duty2lab.config(text=
"%")
12133 phaseblab.config(text =
"Rise Time")
12137 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12138 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12139 global AWG_Amp_Mode
12140 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12141 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12142 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12150 if AWGBFreqvalue > 0.0:
12151 if AWG_2X.get() == 2:
12152 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12153 SamplesPermS = int((BaseSampleRate*2)/1000)
12155 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12156 SamplesPermS = int(BaseSampleRate/1000)
12158 AWGBperiodvalue = 0.0
12159 if AWG_Amp_Mode.get() == 1:
12160 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12161 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12163 MaxV = AWGBOffsetvalue
12164 MinV = AWGBAmplvalue
12166 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12167 if SlopeValue <= 0:
12169 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12172 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
12175 PulseWidth = PulseWidth - SlopeValue
12178 StepValue = (MaxV - MinV) / SlopeValue
12180 for i
in range(SlopeValue):
12181 AWGBwaveform.append(SampleValue)
12182 SampleValue = SampleValue + StepValue
12183 for i
in range(PulseWidth):
12184 AWGBwaveform.append(MaxV)
12185 for i
in range(SlopeValue):
12186 AWGBwaveform.append(SampleValue)
12187 SampleValue = SampleValue - StepValue
12188 for i
in range(Remainder):
12189 AWGBwaveform.append(MinV)
12190 if AWGBBurstFlag.get() == 1:
12191 TempOneCycle = AWGBwaveform
12192 for i
in range(AWGBCycles-1):
12193 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12194 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12195 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12197 duty2lab.config(text=
"%")
12198 phaseblab.config(text =
"Rise Time")
12202 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12203 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12204 global AWG_Amp_Mode
12205 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12206 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12207 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12215 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))
12217 AWGBDutyCycleEntry.delete(0,
"end")
12218 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
12220 if AWGBFreqvalue > 0.0:
12221 if AWG_2X.get() == 2:
12222 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12223 SamplesPermS = int((BaseSampleRate*2)/1000)
12225 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12226 SamplesPermS = int(BaseSampleRate/1000)
12228 AWGBperiodvalue = 0.0
12229 if AWG_Amp_Mode.get() == 1:
12230 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12231 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12233 MaxV = AWGBOffsetvalue
12234 MinV = AWGBAmplvalue
12236 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12237 if SlopeValue <= 0:
12239 PulseWidth = int(AWGBDutyCyclevalue*SamplesPermS)
12242 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
12245 PulseWidth = PulseWidth - SlopeValue
12248 StepValue = (MaxV - MinV) / SlopeValue
12250 for i
in range(SlopeValue):
12251 AWGBwaveform.append(SampleValue)
12252 SampleValue = SampleValue + StepValue
12253 for i
in range(PulseWidth):
12254 AWGBwaveform.append(MaxV)
12255 for i
in range(SlopeValue):
12256 AWGBwaveform.append(SampleValue)
12257 SampleValue = SampleValue - StepValue
12258 for i
in range(Remainder):
12259 AWGBwaveform.append(MinV)
12260 if AWGBBurstFlag.get() == 1:
12261 TempOneCycle = AWGBwaveform
12262 for i
in range(AWGBCycles-1):
12263 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12264 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12265 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12267 duty2lab.config(text=
"Width mS")
12268 phaseblab.config(text =
"Rise Time")
12272 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12273 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12274 global AWG_Amp_Mode
12275 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12276 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12277 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12285 if AWGBFreqvalue > 0.0:
12286 if AWG_2X.get() == 2:
12287 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12288 SamplesPermS = int((BaseSampleRate*2)/1000)
12290 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12291 SamplesPermS = int(BaseSampleRate/1000)
12293 AWGBperiodvalue = 0.0
12294 if AWG_Amp_Mode.get() == 1:
12295 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12296 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12298 MaxV = AWGBOffsetvalue
12299 MinV = AWGBAmplvalue
12301 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
12302 if SlopeValue <= 0:
12304 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12307 Remainder = int(AWGBperiodvalue - PulseWidth)
12310 PulseWidth = PulseWidth - SlopeValue
12313 StepValue = (MaxV - MinV) / SlopeValue
12315 for i
in range(SlopeValue):
12316 AWGBwaveform.append(SampleValue)
12317 SampleValue = SampleValue + StepValue
12318 for i
in range(PulseWidth):
12319 AWGBwaveform.append(MaxV)
12320 for i
in range(Remainder):
12321 AWGBwaveform.append(MinV)
12322 if AWGBBurstFlag.get() == 1:
12323 TempOneCycle = AWGBwaveform
12324 for i
in range(AWGBCycles-1):
12325 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12326 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12327 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12329 duty2lab.config(text=
"%")
12330 phaseblab.config(text =
"Slope Time")
12334 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12335 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12336 global AWG_Amp_Mode
12337 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12338 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12339 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12347 if AWGBFreqvalue > 0.0:
12348 if AWG_2X.get() == 2:
12349 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12350 SamplesPermS = int((BaseSampleRate*2)/1000)
12352 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12353 SamplesPermS = int(BaseSampleRate/1000)
12355 AWGBperiodvalue = 0.0
12356 if AWG_Amp_Mode.get() == 1:
12357 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12358 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12360 MaxV = AWGBOffsetvalue
12361 MinV = AWGBAmplvalue
12363 if AWGBPhaseDelay.get() == 0:
12364 if AWGBPhasevalue > 0:
12365 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12367 AWGBdelayvalue = 0.0
12368 elif AWGBPhaseDelay.get() == 1:
12369 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
12372 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
12375 Remainder = int(AWGBperiodvalue - PulseWidth)
12378 UpStepValue = (MaxV - MinV) / PulseWidth
12379 DownStepValue = (MaxV - MinV) / Remainder
12381 for i
in range(PulseWidth):
12382 AWGBwaveform.append(SampleValue)
12383 SampleValue = SampleValue + UpStepValue
12384 for i
in range(Remainder):
12385 AWGBwaveform.append(SampleValue)
12386 SampleValue = SampleValue - DownStepValue
12387 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
12388 if AWGBBurstFlag.get() == 1:
12389 TempOneCycle = AWGBwaveform
12390 for i
in range(AWGBCycles-1):
12391 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12392 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12393 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12396 duty2lab.config(text =
"Symmetry")
12401 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
12402 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
12403 global AWG_Amp_Mode
12404 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12405 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12406 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12414 if AWGBFreqvalue > 0.0:
12415 if AWG_2X.get() == 2:
12416 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12417 SamplesPermS = int((BaseSampleRate*2)/1000)
12419 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12420 SamplesPermS = int(BaseSampleRate/1000)
12422 AWGBperiodvalue = 0.0
12423 if AWG_Amp_Mode.get() == 1:
12424 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12425 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12427 MaxV = AWGBOffsetvalue
12428 MinV = AWGBAmplvalue
12430 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue / 2)
12431 if AWGBPhaseDelay.get() == 0:
12432 DelayValue = int(AWGBperiodvalue*(AWGBPhasevalue/360))
12433 elif AWGBPhaseDelay.get() == 1:
12434 DelayValue = int(AWGBPhasevalue*SamplesPermS)
12435 for i
in range(DelayValue-PulseWidth):
12436 AWGBwaveform.append((MinV+MaxV)/2)
12437 for i
in range(PulseWidth):
12438 AWGBwaveform.append(MaxV)
12439 for i
in range(PulseWidth):
12440 AWGBwaveform.append(MinV)
12441 DelayValue = int(AWGBperiodvalue-DelayValue)
12442 for i
in range(DelayValue-PulseWidth):
12443 AWGBwaveform.append((MinV+MaxV)/2)
12444 if AWGBBurstFlag.get() == 1:
12445 TempOneCycle = AWGBwaveform
12446 for i
in range(AWGBCycles-1):
12447 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12448 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12449 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
12451 duty2lab.config(text =
"Duty Cycle")
12456 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
12457 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
12458 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12459 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12460 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12466 if AWGBFreqvalue > 0.0:
12467 if AWG_2X.get() == 2:
12468 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12469 SamplesPermS = int((BaseSampleRate*2)/1000)
12471 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12472 SamplesPermS = int(BaseSampleRate/1000)
12474 AWGBperiodvalue = 0.0
12476 if AWGBAmplvalue > AWGBOffsetvalue:
12477 MinV = AWGBOffsetvalue
12478 MaxV = AWGBAmplvalue
12480 MaxV = AWGBOffsetvalue
12481 MinV = AWGBAmplvalue
12482 if AWG_Amp_Mode.get() == 1:
12483 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12484 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12486 AWGBwaveform = numpy.random.uniform(MinV, MaxV, int(AWGBperiodvalue))
12487 Mid = (MaxV+MinV)/2
12488 if AWGBBurstFlag.get() == 1:
12489 TempOneCycle = AWGBwaveform
12490 for i
in range(AWGBCycles-1):
12491 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12492 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12493 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
12499 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
12500 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
12501 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
12502 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
12503 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12509 if AWGBFreqvalue > 0.0:
12510 if AWG_2X.get() == 2:
12511 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
12512 SamplesPermS = int((BaseSampleRate*2)/1000)
12514 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
12515 SamplesPermS = int(BaseSampleRate/1000)
12517 AWGBperiodvalue = 0.0
12518 if AWGBAmplvalue > AWGBOffsetvalue:
12519 MinV = AWGBOffsetvalue
12520 MaxV = AWGBAmplvalue
12522 MaxV = AWGBOffsetvalue
12523 MinV = AWGBAmplvalue
12524 if AWG_Amp_Mode.get() == 1:
12525 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12526 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12528 AWGBwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGBperiodvalue))
12529 Mid = (MaxV+MinV)/2
12530 if AWGBBurstFlag.get() == 1:
12531 TempOneCycle = AWGBwaveform
12532 for i
in range(AWGBCycles-1):
12533 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
12534 TempDelay = int(AWGBBurstDelay*SamplesPermS)
12535 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
12541 global AWGBMode, AWGBIOMode, AWGBModeLabel, DevID, devx, DevOne, CHB, HWRevOne
12542 global EnableScopeOnly
12544 if AWGBMode.get() == 0:
12546 elif AWGBMode.get() == 1:
12548 elif AWGBMode.get() == 2:
12550 if AWGBIOMode.get() > 0:
12551 if HWRevOne ==
"D":
12552 if AWGBMode.get() == 0:
12556 label_txt = label_txt +
" Split I/O"
12557 if EnableScopeOnly == 0:
12558 label_txt = label_txt +
" Mode"
12559 AWGBModeLabel.config(text = label_txt )
12564 global AWGBAmplvalue, AWGBOffsetvalue, AWGA2X, AWG_2X
12565 global AWGBFreqvalue, AWGBPhasevalue, AWGBPhaseDelay
12566 global AWGBDutyCyclevalue, FSweepMode, AWGBRepeatFlag, AWGSync
12567 global AWGBWave, AWGBMode, AWGBTerm, AWGBwaveform, AWGBIOMode
12568 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne
12569 global amp2lab, off2lab, AWG_Amp_Mode
12570 global AWGA2X, AWGB2X, AWGAWave, AWGARepeatFlag, EnableScopeOnly
12571 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
12573 if AWG_Amp_Mode.get() == 0:
12574 amp2lab.config(text =
"Min Ch B" )
12575 off2lab.config(text =
"Max Ch B" )
12577 amp2lab.config(text =
"Amp Ch B" )
12578 off2lab.config(text =
"Off Ch B" )
12580 if AWG_2X.get() == 1:
12581 AWGBWave =
'arbitrary'
12582 if AWGBFreqvalue > 0.0:
12583 AWGBperiodvalue = AWGSAMPLErate/AWGBFreqvalue
12585 AWGBperiodvalue = 0.0
12587 if AWGBPhaseDelay.get() == 0:
12588 if AWGBWave ==
'square':
12589 AWGBPhasevalue = AWGBPhasevalue + 270.0
12590 if AWGBPhasevalue > 359:
12591 AWGBPhasevalue = AWGBPhasevalue - 360
12592 if AWGBPhasevalue > 0:
12593 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
12595 AWGBdelayvalue = 0.0
12596 elif AWGBPhaseDelay.get() == 1:
12597 AWGBdelayvalue = AWGBPhasevalue * 100
12599 if AWGBTerm.get() == 0:
12600 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
12601 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
12602 elif AWGBTerm.get() == 1:
12603 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
12604 devx.ctrl_transfer( 0x40, 0x50, 38, 0, 0, 0, 100)
12605 elif AWGBTerm.get() == 2:
12606 devx.ctrl_transfer( 0x40, 0x50, 37, 0, 0, 0, 100)
12607 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
12609 if AWGBWave ==
'dc':
12610 if AWG_2X.get() == 1:
12611 AWGBWave ==
'arbitrary'
12612 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
12614 if AWGBMode.get() == 0:
12615 if AWGBIOMode.get() == 0:
12616 CHB.mode = Mode.SVMI
12618 CHB.mode = Mode.SVMI_SPLIT
12619 CHB.constant(AWGBOffsetvalue)
12620 if AWGBMode.get() == 1:
12621 if AWGBIOMode.get() == 0:
12622 CHB.mode = Mode.SIMV
12624 CHB.mode = Mode.SIMV_SPLIT
12625 CHB.constant(AWGBOffsetvalue/1000)
12626 if AWGBMode.get() == 2:
12627 if AWGBIOMode.get() == 0:
12628 CHB.mode = Mode.HI_Z
12630 CHB.mode = Mode.HI_Z_SPLIT
12632 if AWGBIOMode.get() > 0:
12633 if HWRevOne ==
"D":
12635 CHB.mode = Mode.SIMV_SPLIT
12638 if AWGBMode.get() == 0:
12639 if AWGBIOMode.get() == 0:
12640 CHB.mode = Mode.SVMI
12642 CHB.mode = Mode.SVMI_SPLIT
12643 if AWGBMode.get() == 1:
12644 if AWGBIOMode.get() == 0:
12645 CHB.mode = Mode.SIMV
12647 CHB.mode = Mode.SIMV_SPLIT
12648 AWGBOffsetvalue = AWGBOffsetvalue/1000
12649 AWGBAmplvalue = AWGBAmplvalue/1000
12650 if AWGBMode.get() == 2:
12651 if AWGBIOMode.get() == 0:
12652 CHB.mode = Mode.HI_Z
12654 CHB.mode = Mode.HI_Z_SPLIT
12656 if AWG_Amp_Mode.get() == 1:
12657 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
12658 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
12660 MaxV = AWGBOffsetvalue
12661 MinV = AWGBAmplvalue
12663 if AWGBWave ==
'sine':
12664 CHB.sine(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12665 elif AWGBWave ==
'triangle':
12666 CHB.triangle(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12667 elif AWGBWave ==
'sawtooth':
12668 CHB.sawtooth(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12669 elif AWGBWave ==
'square':
12670 CHB.square(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue, AWGBDutyCyclevalue)
12671 elif AWGBWave ==
'stairstep':
12672 CHB.stairstep(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
12673 elif AWGBWave ==
'arbitrary':
12674 if EnableScopeOnly == 0:
12676 if AWGSync.get() == 0:
12677 AWGBRepeatFlag.set(1)
12678 if AWG_2X.get() == 1:
12679 AWGBWave ==
'arbitrary'
12680 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
12682 CHB.arbitrary(AWGBwaveform, AWGBRepeatFlag.get())
12685 if AWGBIOMode.get() > 0:
12686 if HWRevOne ==
"D":
12688 CHB.mode = Mode.SIMV_SPLIT
12691 global AWG_2X, AWGA2X, AWGBwaveform
12692 global AWGBNoiseEntry, AWGBsbnoise, AWGBNoisevalue
12694 if AWGBsbnoise.get() ==
"None":
12698 AWGBNoisevalue = float(eval(AWGBNoiseEntry.get()))
12700 AWGBNoiseEntry.delete(0,
"end")
12701 AWGBNoiseEntry.insert(0, AWGBNoisevalue)
12702 if AWGBNoisevalue == 0.0:
12705 if AWGBsbnoise.get() ==
"Gaussian":
12706 AWGBNoiseform = numpy.random.normal(0.0, abs((AWGBNoisevalue)/3), len(AWGBwaveform))
12708 AWGBNoiseform = numpy.random.uniform((-AWGBNoisevalue)/2, (AWGBNoisevalue)/2, len(AWGBwaveform))
12709 AWGBwaveform = AWGBwaveform + AWGBNoiseform
12710 if AWG_2X.get() == 2:
12711 if AWGBsbnoise.get() ==
"Gaussian":
12712 AWGBNoiseform = numpy.random.normal(0.0, abs((AWGBNoisevalue)/3), len(AWGA2X))
12714 AWGBNoiseform = numpy.random.uniform((-AWGBNoisevalue)/2, (AWGBNoisevalue)/2, len(AWGA2X))
12715 AWGA2X = AWGA2X + AWGBNoiseform
12718 global session, CHA, CHB, AWGSync
12720 if (RUNstatus.get() == 1)
and AWGSync.get() == 0:
12721 if session.continuous:
12731 global AWGAMode, AWGBMode, AWGSync
12732 global CHA, CHB, discontloop, contloop, session
12752 global RUNstatus, AWGSync, session, CHA, CHB, IAScreenStatus, IADisp
12754 if (RUNstatus.get() == 1):
12755 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
12758 if AWGSync.get() == 0:
12761 CHA.mode = Mode.HI_Z_SPLIT
12762 CHB.mode = Mode.HI_Z_SPLIT
12766 elif session.continuous:
12769 CHA.mode = Mode.HI_Z_SPLIT
12770 CHB.mode = Mode.HI_Z_SPLIT
12775 global CANVASwidthF, CANVASheightF, freqwindow
12778 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=freqwindow)
12779 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=freqwindow)
12780 if MarkerNum > 0
or ColorMode.get() > 0:
12781 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
12783 COLORtext =
"#000000"
12786 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
12788 COLORtext =
"#ffffff"
12792 print(
"Routine not made yet")
12795 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
12802 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
12810 global FreqTraceMode
12812 FreqTraceMode.set(1)
12813 if RUNstatus.get() == 0:
12815 if RUNstatus.get() == 2:
12820 global FreqTraceMode
12822 FreqTraceMode.set(2)
12823 if RUNstatus.get() == 0:
12825 if RUNstatus.get() == 2:
12829 global RUNstatus, TRACEaverage, FreqTraceMode, freqwindow
12831 FreqTraceMode.set(3)
12833 if RUNstatus.get() == 0:
12835 if RUNstatus.get() == 2:
12839 global FreqTraceMode, TRACEresetFreq
12841 if FreqTraceMode.get()==3:
12842 TRACEresetFreq =
True
12845 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
12846 global T1Fline, T2Fline, T1FRline, T2FRline, TFRMline, TFMline
12847 global T1Pline, T2Pline, T1PRline, T2PRline
12848 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12849 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12850 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12851 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12852 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12854 if ShowC1_VdB.get() == 1:
12859 PeakfreqRA = PeakfreqA
12860 if ShowC2_VdB.get() == 1:
12865 PeakfreqRB = PeakfreqB
12866 if ShowC1_P.get() == 1:
12868 if ShowC2_P.get() == 1:
12870 if ShowMathSA.get() > 0:
12875 PeakfreqRM = PeakfreqM
12880 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
12881 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
12882 global TAFline, TBFline, TAFRline, TBFRline, TBPRMline, TBPMline
12883 global TAPline, TBPline, TAPRline, TBPRline
12884 global TIARline, TIAXline, TIAMagline, TIAAngline
12885 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
12886 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12887 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12888 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12889 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12890 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12892 if ShowCA_VdB.get() == 1:
12897 PeakfreqRA = PeakfreqA
12898 if ShowCB_VdB.get() == 1:
12903 PeakfreqRB = PeakfreqB
12904 if ShowCA_P.get() == 1:
12906 if ShowCB_P.get() == 1:
12908 if ShowMathBP.get() > 0:
12909 TBPRMline = TBPMline
12913 PeakfreqRM = PeakfreqM
12914 if Show_Rseries.get() > 0:
12915 RefIARline = TIARline
12916 if Show_Xseries.get() > 0:
12917 RefIAXline = TIAXline
12918 if Show_Magnitude.get() > 0:
12919 RefIAMagline = TIAMagline
12920 if Show_Angle.get() > 0:
12921 RefIAAngline = TIAAngline
12925 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins, bodewindow
12926 global SAMPLErate, ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, TRACEsize
12929 if ShowCA_VdB.get() == 1:
12930 TRACEsize = len(FSweepAdB)
12931 elif ShowCA_VdB.get() == 1:
12932 TRACEsize = len(FSweepBdB)
12936 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=bodewindow)
12939 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
12940 filename =
"Bode-" + tme
12941 filename = filename +
".csv"
12943 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
12944 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=bodewindow)
12945 DataFile = open(filename,
'a')
12946 HeaderString =
'Frequency-#, '
12947 if ShowCA_VdB.get() == 1:
12949 HeaderString = HeaderString +
'CA-dB, '
12951 HeaderString = HeaderString +
'CA-Mag, '
12952 if ShowCB_VdB.get() == 1:
12954 HeaderString = HeaderString +
'CB-dB, '
12956 HeaderString = HeaderString +
'CB-Mag, '
12957 if ShowCA_P.get() == 1:
12958 HeaderString = HeaderString +
'Phase A-B, '
12959 if ShowCB_P.get() == 1:
12960 HeaderString = HeaderString +
'Phase B-A, '
12961 HeaderString = HeaderString +
'\n'
12962 DataFile.write( HeaderString )
12965 while n < len(FSweepAdB):
12966 F = FBins[FStep[n]]
12968 if ShowCA_VdB.get() == 1:
12969 V = 10 * math.log10(float(FSweepAdB[n]))
12972 txt = txt +
"," + str(V)
12973 if ShowCB_VdB.get() == 1:
12974 V = 10 * math.log10(float(FSweepBdB[n]))
12977 txt = txt +
"," + str(V)
12978 if ShowCA_P.get() == 1:
12979 RelPhase = FSweepAPh[n]
12981 RelPhase = RelPhase - 360
12982 elif RelPhase < -180:
12983 RelPhase = RelPhase + 360
12984 txt = txt +
"," + str(RelPhase)
12985 if ShowCB_P.get() == 1:
12986 RelPhase = FSweepBPh[n]
12988 RelPhase = RelPhase - 360
12989 elif RelPhase < -180:
12990 RelPhase = RelPhase + 360
12991 txt = txt +
"," + str(RelPhase)
12993 DataFile.write(txt)
12999 global iawindow, FStep, FBins
13000 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
13002 if NetworkScreenStatus.get() > 0:
13003 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
13004 filename =
"Impedance-" + tme
13005 filename = filename +
".csv"
13007 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
13008 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=iawindow)
13009 DataFile = open(filename,
'a')
13010 HeaderString =
'Frequency, Series R, Series X, Series Z, Series Angle'
13011 HeaderString = HeaderString +
'\n'
13012 DataFile.write( HeaderString )
13015 while n < len(NSweepSeriesR):
13016 F = FBins[int(FStep[n])]
13017 txt = str(F) +
"," + str(NSweepSeriesR[n]) +
"," + str(NSweepSeriesX[n]) +
"," + str(NSweepSeriesMag[n]) +
"," + str(NSweepSeriesAng[n])
13019 DataFile.write(txt)
13026 global RUNstatus, PowerStatus, devx, PwrBt, freqwindow, session, AWGSync, contloop, discontloop
13027 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA, DevID, FWRevOne, StopFreqEntry
13028 global Two_X_Sample, ADC_Mux_Mode, ShowAWGASA, ShowAWGBSA
13031 if DevID ==
"No Device":
13032 showwarning(
"WARNING",
"No Device Plugged In!")
13033 elif FWRevOne == 0.0:
13034 showwarning(
"WARNING",
"Out of data Firmware!")
13036 if PowerStatus == 0:
13038 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
13039 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
13041 if (ShowC1_VdB.get() == 0
and
13042 ShowC2_VdB.get() == 0
and
13043 ShowMathSA.get() == 0
and
13044 ShowAWGASA.get() == 0
and
13045 ShowAWGBSA.get() == 0
and
13046 ShowC1_P.get() == 0
and
13047 ShowC2_P.get() == 0):
13048 showwarning(
"WARNING",
"Select at least one trace first", parent=freqwindow)
13051 StopFrequency = float(StopFreqEntry.get())
13053 StopFreqEntry.delete(0,
"end")
13054 StopFreqEntry.insert(0,50000)
13055 StopFrequency = 50000
13056 if FWRevOne > 2.16:
13057 if StopFrequency >= 50000:
13058 Two_X_Sample.set(1)
13060 Two_X_Sample.set(0)
13061 ADC_Mux_Mode.set(0)
13069 global RUNstatus, session, AWGSync
13071 if (RUNstatus.get() == 1):
13073 CHA.mode = Mode.HI_Z_SPLIT
13074 CHB.mode = Mode.HI_Z_SPLIT
13075 if AWGSync.get() == 0:
13079 if session.continuous:
13087 elif (RUNstatus.get() == 2):
13089 elif (RUNstatus.get() == 3):
13091 elif (RUNstatus.get() == 4):
13099 DBlevel.set(DBlevel.get() - 1)
13101 if RUNstatus.get() == 0:
13108 DBlevel.set(DBlevel.get() + 1)
13110 if RUNstatus.get() == 0:
13117 DBlevel.set(DBlevel.get() - 10)
13119 if RUNstatus.get() == 0:
13126 DBlevel.set(DBlevel.get() + 10)
13128 if RUNstatus.get() == 0:
13132 global RUNstatus, SpectrumScreenStatus, IAScreenStatus
13133 global SMPfftpwrTwo, SMPfft, FFTwindow
13134 global TRACEresetFreq, PhAScreenStatus
13136 if FFTwindow.get() != 8:
13137 if (SMPfftpwrTwo.get() > 6):
13138 SMPfftpwrTwo.set(SMPfftpwrTwo.get() - 1)
13139 TRACEresetFreq =
True
13140 SMPfft = 2 ** int(SMPfftpwrTwo.get())
13142 if RUNstatus.get() == 0:
13143 if SpectrumScreenStatus.get() > 0:
13145 if IAScreenStatus.get() > 0:
13147 if PhAScreenStatus.get() > 0:
13149 if RUNstatus.get() == 2:
13153 global RUNstatus, PhAScreenStatus
13154 global SMPfftpwrTwo, SMPfft, FFTwindow
13155 global TRACEresetFreq, SpectrumScreenStatus, IAScreenStatus
13157 if FFTwindow.get() != 8:
13158 if (SMPfftpwrTwo.get() < 16):
13159 SMPfftpwrTwo.set(SMPfftpwrTwo.get() + 1)
13160 TRACEresetFREQ =
True
13161 SMPfft = 2 ** int(SMPfftpwrTwo.get())
13163 if RUNstatus.get() == 0:
13164 if SpectrumScreenStatus.get() > 0:
13166 if IAScreenStatus.get() > 0:
13168 if PhAScreenStatus.get() > 0:
13170 if RUNstatus.get() == 2:
13177 if (DBdivindex.get() >= 1):
13178 DBdivindex.set(DBdivindex.get() - 1)
13180 if RUNstatus.get() == 0:
13188 if (DBdivindex.get() < len(DBdivlist) - 1):
13189 DBdivindex.set(DBdivindex.get() + 1)
13191 if RUNstatus.get() == 0:
13195 global RUNstatus, LoopNum, PowerStatus, devx, PwrBt, bodewindow, session, AWGSync
13196 global ShowCA_VdB, ShowCB_P, ShowCB_VdB, ShowCB_P, ShowMathBP, contloop, discontloop
13197 global FBins, FStep, NSteps, FSweepMode, HScaleBP, CutDC
13198 global AWGAMode, AWGAShape, AWGBMode, AWGBShape
13199 global StartBodeEntry, StopBodeEntry, SweepStepBodeEntry, DevID, FWRevOne
13200 global AWGAFreqEntry, AWGBFreqEntry, Reset_Freq, AWGAIOMode, AWGBIOMode
13201 global Two_X_Sample, ADC_Mux_Mode, AWG_2X, ZEROstuffing, SAMPLErate
13202 global BeginIndex, EndIndex
13204 if DevID ==
"No Device":
13205 showwarning(
"WARNING",
"No Device Plugged In!")
13206 elif FWRevOne == 0.0:
13207 showwarning(
"WARNING",
"Out of data Firmware!")
13209 if PowerStatus == 0:
13211 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
13212 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
13214 if ShowCA_VdB.get() == 0
and ShowCB_VdB.get() == 0
and ShowMathBP.get() == 0:
13215 showwarning(
"WARNING",
"Select at least one trace first", parent=bodewindow)
13218 if ZEROstuffing.get() < 3:
13219 ZEROstuffing.set(3)
13222 EndFreq = float(StopBodeEntry.get())
13224 StopBodeEntry.delete(0,
"end")
13225 StopBodeEntry.insert(0,10000)
13227 if FWRevOne > 2.16:
13228 if EndFreq >= 20000:
13229 Two_X_Sample.set(1)
13230 FBins = numpy.linspace(0, 100000, num=32768)
13232 Two_X_Sample.set(0)
13233 FBins = numpy.linspace(0, 50000, num=32768)
13234 ADC_Mux_Mode.set(0)
13237 BeginFreq = float(StartBodeEntry.get())
13239 StartBodeEntry.delete(0,
"end")
13240 StartBodeEntry.insert(0,100)
13243 if FSweepMode.get() == 1:
13244 if AWGAMode.get() == 2:
13247 if Two_X_Sample.get() == 1:
13254 Reset_Freq = AWGAFreqEntry.get()
13255 if FSweepMode.get() == 2:
13256 if AWGBMode.get() == 2:
13259 if Two_X_Sample.get() == 1:
13266 Reset_Freq = AWGBFreqEntry.get()
13267 if FSweepMode.get() == 3:
13271 NSteps.set(float(SweepStepBodeEntry.get()))
13273 SweepStepBodeEntry.delete(0,
"end")
13274 SweepStepBodeEntry.insert(0, NSteps.get())
13276 if FSweepMode.get() > 0:
13280 NyquistFreq = SAMPLErate/2
13281 BeginIndex = int((BeginFreq/NyquistFreq)*32768)
13282 EndIndex = int((EndFreq/NyquistFreq)*32768)
13283 if NSteps.get() < 5:
13285 if HScaleBP.get() == 1:
13286 LogFStop = math.log10(EndIndex)
13288 LogFStart = math.log10(BeginIndex)
13291 FStep = numpy.logspace(LogFStart, LogFStop, num=NSteps.get(), base=10.0)
13293 FStep = numpy.linspace(BeginIndex, EndIndex, num=NSteps.get())
13299 global RUNstatus, session, AWGSync, FSweepMode, AWGAFreqEntry, AWGBFreqEntry, Reset_Freq
13301 if FSweepMode.get() == 1:
13302 AWGAFreqEntry.delete(0,
"end")
13303 AWGAFreqEntry.insert(0, Reset_Freq)
13304 if FSweepMode.get() == 2:
13305 AWGBFreqEntry.delete(0,
"end")
13306 AWGBFreqEntry.insert(0, Reset_Freq)
13308 if (RUNstatus.get() == 1):
13310 if AWGSync.get() == 0:
13312 elif (RUNstatus.get() == 2):
13314 elif (RUNstatus.get() == 3):
13316 elif (RUNstatus.get() == 4):
13324 DBlevelBP.set(DBlevelBP.get() - 1)
13326 if RUNstatus.get() == 0:
13333 DBlevelBP.set(DBlevelBP.get() + 1)
13335 if RUNstatus.get() == 0:
13342 DBlevelBP.set(DBlevelBP.get() - 10)
13344 if RUNstatus.get() == 0:
13351 DBlevelBP.set(DBlevelBP.get() + 10)
13353 if RUNstatus.get() == 0:
13357 global DBdivindexBP
13360 if (DBdivindexBP.get() >= 1):
13361 DBdivindexBP.set(DBdivindexBP.get() - 1)
13363 if RUNstatus.get() == 0:
13367 global DBdivindexBP
13371 if (DBdivindexBP.get() < len(DBdivlist) - 1):
13372 DBdivindexBP.set(DBdivindexBP.get() + 1)
13374 if RUNstatus.get() == 0:
13378 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
13385 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
13392 global FFTBuffA, FFTBuffB
13409 global FFTBuffA, FFTBuffB
13412 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13427 global FFTBuffA, FFTBuffB, AWGAwaveform, AWGBwaveform
13428 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowAWGASA, ShowAWGBSA
13429 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
13430 global FFTmemoryB, FFTresultB, FFTresultAWGA, FFTresultAWGB
13431 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh
13432 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13433 global FFTwindowshape, FFTbandwidth
13434 global AWGSAMPLErate, StartFreqEntry, StopFreqEntry, StartBodeEntry
13435 global SMPfft, LoopNum, IA_Ext_Conf
13436 global STARTsample, STOPsample, CutDC
13437 global TRACEaverage, FreqTraceMode, FSweepMode
13438 global TRACEresetFreq, ZEROstuffing
13439 global SpectrumScreenStatus, IAScreenStatus, BodeScreenStatus
13440 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
13441 global NSweepParallelR, NSweepParallelC, NSweepParallelL, NSweepSeriesC, NSweepSeriesL
13449 REX = numpy.array(FFTBuffA[0:SMPfft])
13455 REX = REX * FFTwindowshape[0:len(REX)]
13458 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13459 fftsamples = ZEROstuffingvalue * SMPfft
13462 FFTmemoryA = FFTresultA
13463 if FreqTraceMode.get() == 3:
13464 PhaseMemoryA = PhaseA
13467 ALL = numpy.fft.fft(REX, n=fftsamples)
13468 PhaseA = numpy.angle(ALL, deg=
True)
13469 ALL = numpy.absolute(ALL)
13472 le = int(len(ALL) / 2)
13474 FFTresultA = ALL[0:le]
13475 PhaseA = PhaseA[0:le]
13476 RMScorr = 1.0 / SMPfft
13477 Powcorr = 50*(RMScorr **2)
13478 FFTresultA = FFTresultA * Powcorr
13483 REX = numpy.array(FFTBuffB[0:SMPfft])
13490 REX = REX * FFTwindowshape
13494 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13495 fftsamples = ZEROstuffingvalue * SMPfft
13498 FFTmemoryB = FFTresultB
13499 if FreqTraceMode.get() == 3:
13500 PhaseMemoryB = PhaseB
13502 ALL = numpy.fft.fft(REX, n=fftsamples)
13503 PhaseB = numpy.angle(ALL, deg=
True)
13504 ALL = numpy.absolute(ALL)
13507 le = int(len(ALL) / 2 )
13509 FFTresultB = ALL[0:le]
13510 PhaseB = PhaseB[0:le]
13511 FFTresultB = FFTresultB * Powcorr
13513 if IA_Ext_Conf.get() == 1:
13518 REX = numpy.array(FFTBuffA[0:SMPfft]-FFTBuffB[0:SMPfft])
13524 REX = REX * FFTwindowshape
13527 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13528 fftsamples = ZEROstuffingvalue * SMPfft
13535 ALL = numpy.fft.fft(REX, n=fftsamples)
13536 PhaseAB = numpy.angle(ALL, deg=
True)
13537 ALL = numpy.absolute(ALL)
13542 FFTresultAB = ALL[:le]
13543 PhaseAB = PhaseAB[:le]
13544 FFTresultAB = FFTresultAB * Powcorr
13546 if ShowAWGASA.get() > 0:
13547 FFTAWGA = AWGAwaveform
13549 if CutDC.get() == 1:
13550 DCA = numpy.average(FFTAWGA)
13551 FFTAWGA = FFTAWGA - DCA
13552 if len(AWGAwaveform) < SMPfft:
13553 Repeats = math.ceil(SMPfft/len(AWGAwaveform))
13556 FFTAWGA = numpy.concatenate((FFTAWGA, AWGAwaveform-DCA))
13561 REX = numpy.array(FFTAWGA[0:SMPfft])
13568 REX = REX * FFTwindowshape
13572 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13573 fftsamples = ZEROstuffingvalue * SMPfft
13575 ALL = numpy.fft.fft(REX, n=fftsamples)
13577 ALL = numpy.absolute(ALL)
13580 le = int(len(ALL) / 2 )
13582 FFTresultAWGA = ALL[0:le]
13584 FFTresultAWGA = FFTresultAWGA * Powcorr
13586 if ShowAWGBSA.get() > 0:
13587 FFTAWGB = AWGBwaveform
13589 if CutDC.get() == 1:
13590 DCB = numpy.average(FFTAWGB)
13591 FFTAWGB = FFTAWGB - DCB
13592 if len(AWGBwaveform) < SMPfft:
13593 Repeats = math.ceil(SMPfft/len(AWGBwaveform))
13596 FFTAWGB = numpy.concatenate((FFTAWGB, AWGBwaveform-DCB))
13601 REX = numpy.array(FFTAWGB[0:SMPfft])
13608 REX = REX * FFTwindowshape
13612 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
13613 fftsamples = ZEROstuffingvalue * SMPfft
13615 ALL = numpy.fft.fft(REX, n=fftsamples)
13617 ALL = numpy.absolute(ALL)
13620 le = int(len(ALL) / 2 )
13622 FFTresultAWGB = ALL[0:le]
13624 FFTresultAWGB = FFTresultAWGB * Powcorr
13626 TRACEsize = int(len(FFTresultB))
13627 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13628 if SpectrumScreenStatus.get() > 0:
13630 StartFrequency = float(StartFreqEntry.get())
13632 StartFreqEntry.delete(0,
"end")
13633 StartFreqEntry.insert(0,100)
13634 StartFrequency = 100
13635 STARTsample = int(StartFrequency / Fsample)
13638 if LoopNum.get() == 1:
13639 PhaseMemoryB = PhaseB
13644 if NetworkScreenStatus.get() > 0:
13647 NSweepSeriesMag = []
13648 NSweepSeriesAng = []
13649 NSweepParallelR = []
13650 NSweepParallelC = []
13651 NSweepParallelL = []
13654 if FreqTraceMode.get() == 1:
13655 if FSweepMode.get() == 1:
13656 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13657 if ptmax > STARTsample:
13658 STARTsample = ptmax
13661 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13663 if FSweepMode.get() == 2:
13664 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13665 if ptmax > STARTsample:
13666 STARTsample = ptmax
13669 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13672 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
13673 if FSweepMode.get() == 1:
13674 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13675 if ptmax > STARTsample:
13676 STARTsample = ptmax
13679 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13681 if FSweepMode.get() == 2:
13682 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13683 if ptmax > STARTsample:
13684 STARTsample = ptmax
13687 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
13689 if len(FFTresultB) == len(FFTmemoryB):
13690 FFTresultB = numpy.maximum(FFTresultB, FFTmemoryB)
13691 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
13693 FFTresultB = FFTmemoryB + (FFTresultB - FFTmemoryB) / TRACEaverage.get()
13694 PhaseB = PhaseMemoryB +(PhaseB - PhaseMemoryB) / TRACEaverage.get()
13696 FFTmemoryB = FFTresultB
13697 PhaseMemoryB = PhaseB
13699 TRACEsize = int(len(FFTresultA))
13700 Fsample = float(AWGSAMPLErate / 2) / (TRACEsize - 1)
13701 if SpectrumScreenStatus.get() > 0:
13702 STARTsample = int(StartFrequency / Fsample)
13705 if LoopNum.get() == 1:
13706 PhaseMemoryA = PhaseA
13707 if FreqTraceMode.get() == 1:
13708 if FSweepMode.get() == 1:
13709 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13710 if ptmax > STARTsample:
13711 STARTsample = ptmax
13714 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13716 if FSweepMode.get() == 2:
13717 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13718 if ptmax > STARTsample:
13719 STARTsample = ptmax
13722 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13725 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
13726 if FSweepMode.get() == 1:
13727 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
13728 if ptmax > STARTsample:
13729 STARTsample = ptmax
13732 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13734 if FSweepMode.get() == 2:
13735 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
13736 if ptmax > STARTsample:
13737 STARTsample = ptmax
13740 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
13743 if len(FFTresultA) == len(FFTmemoryA):
13744 FFTresultA = numpy.maximum(FFTresultA, FFTmemoryA)
13745 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
13747 FFTresultA = FFTmemoryA + (FFTresultA - FFTmemoryA) / TRACEaverage.get()
13748 PhaseA = PhaseMemoryA +(PhaseA - PhaseMemoryA) / TRACEaverage.get()
13750 FFTmemoryA = FFTresultA
13751 PhaseMemoryA = PhaseA
13753 if FSweepMode.get() > 0
and BodeScreenStatus.get() > 0:
13754 FSweepAdB.append(numpy.amax(FFTresultA))
13755 FSweepBdB.append(numpy.amax(FFTresultB))
13756 FSweepAPh.append(PhaseA[numpy.argmax(FFTresultA)])
13757 FSweepBPh.append(PhaseB[numpy.argmax(FFTresultB)])
13759 TRACEresetFreq =
False
13762 global FFTmemoryA, FFTresultA
13763 global FFTmemoryB, FFTresultB
13764 global FFTresultAWGA, FFTresultAWGB, ShowAWGASA, ShowAWGBSA
13765 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13766 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep
13767 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
13768 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13769 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakIndexA, PeakIndexB
13770 global PeakfreqA, PeakfreqB, Two_X_Sample
13775 global AWGSAMPLErate, HScale, Fsample, SAMPLErate, BaseSampleRate
13776 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
13777 global STARTsample, STOPsample, LoopNum, FSweepMode, FreqTraceMode, SMPfft
13778 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
13779 global T1Fline, T2Fline, TFMline, T1Pline, T2Pline, TAFline, TBFline
13786 StartFrequency = float(StartFreqEntry.get())
13788 StartFreqEntry.delete(0,
"end")
13789 StartFreqEntry.insert(0,100)
13790 StartFrequency = 100
13792 StopFrequency = float(StopFreqEntry.get())
13794 StopFreqEntry.delete(0,
"end")
13795 StopFreqEntry.insert(0,50000)
13796 StopFrequency = 50000
13797 if StartFrequency > StopFrequency :
13798 StopFreqEntry.delete(0,
"end")
13799 StopFreqEntry.insert(0,50000)
13800 StopFrequency = 50000
13801 if StopFrequency < StartFrequency :
13802 StopFreqEntry.delete(0,
"end")
13803 StopFreqEntry.insert(0,50000)
13804 StopFrequency = 50000
13806 Phasecenter = int(PhCenFreqEntry.get())
13807 RelPhaseCenter.set(Phasecenter)
13809 PhCenFreqEntry.delete(0,
"end")
13810 PhCenFreqEntry.insert(0,0)
13811 RelPhaseCenter.set(0)
13814 if SAvertmaxEntry.get() ==
"10.0":
13816 elif SAvertmaxEntry.get() ==
"1.0":
13818 elif SAvertmaxEntry.get() ==
"0.1":
13820 elif SAvertmaxEntry.get() ==
"10mV":
13822 elif SAvertmaxEntry.get() ==
"1mV":
13824 elif SAvertmaxEntry.get() ==
"100uV":
13826 elif SAvertmaxEntry.get() ==
"10uV":
13828 elif SAvertmaxEntry.get() ==
"1uV":
13830 elif SAvertmaxEntry.get() ==
"100nV":
13832 elif SAvertmaxEntry.get() ==
"10nV":
13835 SAvertmax = float(SAvertmaxEntry.get())
13836 if SAvertmax < 0.0:
13837 SAvertmaxEntry.delete(0,
"end")
13838 SAvertmaxEntry.insert(0,
"1mV")
13841 SAvertmaxEntry.delete(0,
"end")
13842 SAvertmaxEntry.insert(0,
"1mV")
13845 if SAvertminEntry.get() ==
"10.0":
13847 elif SAvertminEntry.get() ==
"1.0":
13849 elif SAvertminEntry.get() ==
"0.1":
13851 elif SAvertminEntry.get() ==
"10mV":
13853 elif SAvertminEntry.get() ==
"1mV":
13855 elif SAvertminEntry.get() ==
"100uV":
13857 elif SAvertminEntry.get() ==
"10uV":
13859 elif SAvertminEntry.get() ==
"1uV":
13861 elif SAvertminEntry.get() ==
"100nV":
13863 elif SAvertminEntry.get() ==
"10nV":
13866 SAvertmin = float(SAvertminEntry.get())
13867 if SAvertmin < 0.0:
13868 SAvertminEntry.delete(0,
"end")
13869 SAvertminEntry.insert(0,
"1uV")
13872 SAvertminEntry.delete(0,
"end")
13873 SAvertminEntry.insert(0,
"1uV")
13875 if ShowC1_VdB.get() == 1
or ShowMathSA.get() > 0:
13876 TRACEsize = len(FFTresultA)
13877 elif ShowC2_VdB.get() == 1
or ShowMathSA.get() > 0:
13878 TRACEsize = len(FFTresultB)
13879 elif ShowAWGASA.get() > 0:
13880 TRACEsize = len(FFTresultAWGA)
13881 elif ShowAWGBSA.get() > 0:
13882 TRACEsize = len(FFTresultAWGB)
13886 if FSweepMode.get() > 0
and LoopNum.get() == NSteps.get():
13887 PhaseA = PhaseMemoryA
13888 PhaseB = PhaseMemoryB
13889 FBinWidth = float(SAMPLErate / 2.0) / (TRACEsize - 1)
13891 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
13892 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
13893 Yc = float(Y0TF) + Yconv * (DBlevel.get())
13894 YVc = float(Y0TF) + YVconv * SAvertmax
13897 Yphconv = float(GRHF) / 360
13898 Yp = float(Y0TF) + Yphconv + 180
13900 Fpixel = (StopFrequency - StartFrequency) / GRWF
13901 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13902 LogFStop = math.log10(StopFrequency)
13904 LogFStart = math.log10(StartFrequency)
13907 LogFpixel = (LogFStop - LogFStart) / GRWF
13910 LogVStop = math.log10(SAvertmax)
13914 LogVStart = math.log10(SAvertmin)
13917 LogVpixel = (LogVStop - LogVStart) / GRHF
13919 STARTsample = StartFrequency / Fsample
13920 STARTsample = int(math.ceil(STARTsample))
13922 STOPsample = StopFrequency / Fsample
13923 STOPsample = int(math.floor(STOPsample))
13925 MAXsample = TRACEsize
13926 if STARTsample > (MAXsample - 1):
13927 STARTsample = MAXsample - 1
13929 if STOPsample > MAXsample:
13930 STOPsample = MAXsample
13940 PeakIndexA = PeakIndexB = n
13941 PeakdbA = PeakdbB = PeakMdb = -200
13942 while n <= STOPsample:
13944 if HScale.get() == 1:
13946 LogF = math.log10(F)
13947 x = X0LF + (LogF - LogFStart)/LogFpixel
13951 x = X0LF + (F - StartFrequency) / Fpixel
13952 if ShowC1_VdB.get() == 1:
13953 T1Fline.append(int(x + 0.5))
13955 if SAVScale.get() == 0:
13956 if SAVPSD.get() == 1:
13957 dbA = 10 * math.log10(float(FFTresultA[n])/math.sqrt(FBinWidth))
13959 dbA = 10 * math.log10(float(FFTresultA[n]))
13960 ya = Yc - Yconv * dbA
13962 dbA = 10 * math.log10(float(FFTresultA[n]))
13963 V = 10.0**(dbA/20.0)
13964 if SAVPSD.get() == 1:
13965 V = V/math.sqrt(FBinWidth)
13966 if SAVScale.get() == 2:
13968 LogV = math.log10(V)
13969 ya = YVc - (LogV - LogVStart)/LogVpixel
13971 ya = YVc - YVconv * V
13973 ya = YVc - YVconv * V
13982 PeakyA = int(ya + 0.5)
13983 PeakxA = int(x + 0.5)
13986 T1Fline.append(int(ya + 0.5))
13987 if ShowC2_VdB.get() == 1:
13988 T2Fline.append(int(x + 0.5))
13990 if SAVScale.get() == 0:
13991 if SAVPSD.get() == 1:
13992 dbB = 10 * math.log10(float(FFTresultB[n])/math.sqrt(FBinWidth))
13994 dbB = 10 * math.log10(float(FFTresultB[n]))
13995 yb = Yc - Yconv * dbB
13997 dbB = 10 * math.log10(float(FFTresultB[n]))
13998 V = 10.0**(dbB/20.0)
13999 if SAVPSD.get() == 1:
14000 V = V/math.sqrt(FBinWidth)
14001 if SAVScale.get() == 2:
14003 LogV = math.log10(V)
14004 yb = YVc - (LogV - LogVStart)/LogVpixel
14006 yb = YVc - YVconv * V
14008 yb = YVc - YVconv * V
14017 PeakyB = int(yb + 0.5)
14018 PeakxB = int(x + 0.5)
14021 T2Fline.append(int(yb + 0.5))
14022 if ShowAWGASA.get() > 0:
14023 TAFline.append(int(x + 0.5))
14025 if SAVPSD.get() == 1:
14026 dbA = 10 * math.log10(float(FFTresultAWGA[n])/math.sqrt(FBinWidth))
14028 dbA = 10 * math.log10(float(FFTresultAWGA[n]))
14029 ya = Yc - Yconv * dbA
14036 TAFline.append(int(ya + 0.5))
14037 if ShowAWGBSA.get() > 0:
14038 TBFline.append(int(x + 0.5))
14040 if SAVPSD.get() == 1:
14041 dbA = 10 * math.log10(float(FFTresultAWGB[n])/math.sqrt(FBinWidth))
14043 dbA = 10 * math.log10(float(FFTresultAWGb[n]))
14044 ya = Yc - Yconv * dbA
14051 TBFline.append(int(ya + 0.5))
14052 if ShowC1_P.get() == 1:
14053 T1Pline.append(int(x + 0.5))
14054 if FSweepMode.get() > 0:
14055 RelPhase = PhaseMemoryA[n]-PhaseMemoryB[n]
14057 RelPhase = PhaseA[n]-PhaseB[n]
14058 RelPhase = RelPhase - Phasecenter
14060 RelPhase = RelPhase - 360
14061 elif RelPhase < -180:
14062 RelPhase = RelPhase + 360
14063 if Two_X_Sample.get() == 0:
14064 PhErr = 0.0018 * n * Fsample
14065 RelPhase = RelPhase + PhErr - 12.0
14067 RelPhase = RelPhase - 9.0
14068 ya = Yp - Yphconv * RelPhase
14069 T1Pline.append(int(ya + 0.5))
14070 if ShowC2_P.get() == 1:
14071 T2Pline.append(int(x + 0.5))
14072 if FSweepMode.get() > 0:
14073 RelPhase = PhaseMemoryB[n]-PhaseMemoryA[n]
14075 RelPhase = PhaseB[n]-PhaseA[n]
14076 RelPhase = RelPhase - Phasecenter
14078 RelPhase = RelPhase - 360
14079 elif RelPhase < -180:
14080 RelPhase = RelPhase + 360
14081 if Two_X_Sample.get() == 0:
14082 PhErr = 0.0018 * n * Fsample
14083 RelPhase = RelPhase - PhErr - 12.0
14085 RelPhase = RelPhase - 9.0
14086 ya = Yp - Yphconv * RelPhase
14087 T2Pline.append(int(ya + 0.5))
14088 if ShowMathSA.get() > 0:
14089 TFMline.append(int(x + 0.5))
14090 if SAVPSD.get() == 1:
14091 dbA = 10 * math.log10(float(FFTresultA[n])/math.sqrt(FBinWidth))
14092 dbB = 10 * math.log10(float(FFTresultB[n])/math.sqrt(FBinWidth))
14094 dbA = 10 * math.log10(float(FFTresultA[n]))
14095 dbB = 10 * math.log10(float(FFTresultB[n]))
14096 if ShowMathSA.get() == 1:
14098 elif ShowMathSA.get() == 2:
14100 yb = Yc - Yconv * MdB
14107 PeakyM = int(yb + 0.5)
14108 PeakxM = int(x + 0.5)
14110 TFMline.append(int(yb + 0.5))
14115 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins
14116 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
14117 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14118 global PeakxM, PeakyM, PeakMdb, PeakfreqM
14119 global PeakfreqA, PeakfreqB, Two_X_Sample, PhaseOffset1x, PhaseOffset2x
14120 global DBdivindexBP
14125 global AWGSAMPLErate, HScaleBP, RUNstatus, SAMPLErate, BaseSampleRate
14126 global StartBodeEntry, StopBodeEntry, SMPfft
14127 global STARTsample, STOPsample, LoopNum, FSweepMode
14128 global FreqTraceMode, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
14129 global TAFline, TBFline, TBPMline, TAPline, TBPline
14133 global ResScale, NetworkScreenStatus, Show_Rseries, NSweepSeriesR, Show_Xseries, NSweepSeriesX
14134 global Show_Magnitude, NSweepSeriesMag, Show_Angle, NSweepSeriesAng
14135 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
14139 if ShowCA_VdB.get() == 1
or ShowMathBP.get() > 0:
14140 TRACEsize = len(FStep)
14141 elif ShowCB_VdB.get() == 1
or ShowMathBP.get() > 0:
14142 TRACEsize = len(FStep)
14147 EndFreq = float(StopBodeEntry.get())
14149 StopBodeEntry.delete(0,
"end")
14150 StopBodeEntry.insert(0,10000)
14153 BeginFreq = float(StartBodeEntry.get())
14155 StartBodeEntry.delete(0,
"end")
14156 StartBodeEntry.insert(0,100)
14159 Phasecenter = float(PhCenBodeEntry.get())
14160 RelPhaseCenter.set(Phasecenter)
14162 PhCenBodeEntry.delete(0,
"end")
14163 PhCenBodeEntry.insert(0,0)
14164 RelPhaseCenter.set(0)
14167 Impedcenter = float(ImCenBodeEntry.get())
14168 ImpedanceCenter.set(Impedcenter)
14170 ImCenBodeEntry.delete(0,
"end")
14171 ImCenBodeEntry.insert(0,0)
14172 ImpedanceCenter.set(0)
14175 HalfSAMPLErate = SAMPLErate/2
14176 BeginIndex = int((BeginFreq/HalfSAMPLErate)*16384)
14177 EndIndex = int((EndFreq/HalfSAMPLErate)*16384)
14178 CurrentFreqX = X0LBP + 14
14179 if FSweepMode.get() > 0
and len(FSweepAdB) > 4:
14181 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14182 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
14184 Ymax = Y0TBP + GRHBP
14185 Yphconv = float(GRHBP) / 360
14186 Yp = float(Y0TBP) + Yphconv + 180
14189 Fpixel = (EndFreq - BeginFreq) / GRWBP
14190 LogFStop = math.log10(EndFreq)
14192 LogFStart = math.log10(BeginFreq)
14195 LogFpixel = (LogFStop - LogFStart) / GRWBP
14209 for n
in range(len(FSweepAdB)):
14211 F = FBins[int(FStep[n])]
14213 F = FBins[int(FStep[0])]
14214 if F >= BeginFreq
and F <= EndFreq:
14215 if HScaleBP.get() == 1:
14217 LogF = math.log10(F)
14218 x = x1 + (LogF - LogFStart)/LogFpixel
14222 x = x1 + (F - BeginFreq) / Fpixel
14224 if ShowCA_VdB.get() == 1:
14225 TAFline.append(int(x + 0.5))
14227 dbA = 10 * math.log10(float(FSweepAdB[n]))
14228 ya = Yc - Yconv * dbA
14237 PeakyA = int(ya + 0.5)
14238 PeakxA = int(x + 0.5)
14240 TAFline.append(int(ya + 0.5))
14241 if ShowCB_VdB.get() == 1:
14242 TBFline.append(int(x + 0.5))
14244 dbB = 10 * math.log10(float(FSweepBdB[n]))
14245 yb = Yc - Yconv * dbB
14254 PeakyB = int(yb + 0.5)
14255 PeakxB = int(x + 0.5)
14257 TBFline.append(int(yb + 0.5))
14258 if ShowCA_P.get() == 1:
14259 TAPline.append(int(x + 0.5))
14260 RelPhase = FSweepAPh[n] - FSweepBPh[n]
14261 RelPhase = RelPhase - Phasecenter
14263 RelPhase = RelPhase - 360
14264 elif RelPhase < -180:
14265 RelPhase = RelPhase + 360
14266 if Two_X_Sample.get() == 0:
14268 RelPhase = RelPhase + PhErr - PhaseOffset1x
14270 RelPhase = RelPhase - PhaseOffset2x
14271 ya = Yp - Yphconv * RelPhase
14272 TAPline.append(int(ya + 0.5))
14273 if ShowCB_P.get() == 1:
14274 TBPline.append(int(x + 0.5))
14275 RelPhase = FSweepBPh[n] - FSweepAPh[n]
14276 RelPhase = RelPhase - Phasecenter
14278 RelPhase = RelPhase - 360
14279 elif RelPhase < -180:
14280 RelPhase = RelPhase + 360
14281 if Two_X_Sample.get() == 0:
14283 RelPhase = RelPhase - PhErr - PhaseOffset1x
14285 RelPhase = RelPhase - PhaseOffset2x
14286 ya = Yp - Yphconv * RelPhase
14287 TBPline.append(int(ya + 0.5))
14288 if ShowMathBP.get() > 0:
14289 TBPMline.append(int(x + 0.5))
14290 dbA = 10 * math.log10(float(FSweepAdB[n]))
14291 dbB = 10 * math.log10(float(FSweepBdB[n]))
14292 if ShowMathBP.get() == 1:
14294 elif ShowMathBP.get() == 2:
14296 yb = Yc - Yconv * MdB
14303 PeakyM = int(yb + 0.5)
14304 PeakxM = int(x + 0.5)
14306 TBPMline.append(int(yb + 0.5))
14308 if NetworkScreenStatus.get() > 0:
14309 ycenter = Y0TBP + (GRHBP/2)
14310 OhmsperPixel = float(ResScale.get())*Vdiv.get()/GRHBP
14312 for n
in range(len(NSweepSeriesR)):
14314 F = FBins[int(FStep[n])]
14316 F = FBins[int(FStep[0])]
14317 if F >= BeginFreq
and F <= EndFreq:
14318 if HScaleBP.get() == 1:
14320 LogF = math.log10(F)
14321 x = x1 + (LogF - LogFStart)/LogFpixel
14325 x = x1 + (F - BeginFreq) / Fpixel
14326 if Show_Rseries.get() == 1:
14327 TIARline.append(int(x + 0.5))
14328 y1 = ycenter - ((NSweepSeriesR[n]-Impedcenter) / OhmsperPixel)
14333 TIARline.append(y1)
14334 if Show_Xseries.get() == 1:
14335 TIAXline.append(int(x + 0.5))
14336 y1 = ycenter - ((NSweepSeriesX[n]-Impedcenter) / OhmsperPixel)
14341 TIAXline.append(y1)
14342 if Show_Magnitude.get() == 1:
14343 TIAMagline.append(int(x + 0.5))
14344 y1 = ycenter - ((NSweepSeriesMag[n]-Impedcenter) / OhmsperPixel)
14349 TIAMagline.append(y1)
14350 if Show_Angle.get() == 1:
14351 TIAAngline.append(int(x + 0.5))
14352 y1 = ycenter - Yphconv * (NSweepSeriesAng[n]-Phasecenter)
14357 TIAAngline.append(y1)
14360 global CANVASheightBP, CANVASwidthBP, SmoothCurvesBP
14361 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14362 global PeakxM, PeakyM, PeakMdb, PeakfreqM
14363 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
14364 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
14365 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
14367 global COLORsignalband, COLORtext
14368 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
14369 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
14370 global DBdivindexBP
14373 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14380 global AWGSAMPLErate, HScaleBP, SAMPLErate, BaseSampleRate
14382 global StartBodeEntry, StopBodeEntry
14383 global ShowCA_P, ShowCB_P, ShowRA_VdB, ShowRB_VdB, ShowMarkerBP
14384 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP
14385 global ShowMathBP, BodeDisp, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
14386 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
14387 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, NetworkScreenStatus
14388 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
14389 global TAFline, TBFline, TAPline, TAFRline, TBFRline, TBPMline, TBPRMline
14390 global TAPRline, TBPRline
14391 global TRACEaverage
14392 global FreqTraceMode
14393 global Vdiv, ResScale
14394 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
14395 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
14402 EndFreq = float(StopBodeEntry.get())
14404 StopBodeEntry.delete(0,
"end")
14405 StopBodeEntry.insert(0,10000)
14408 BeginFreq = float(StartBodeEntry.get())
14410 StartBodeEntry.delete(0,
"end")
14411 StartBodeEntry.insert(0,100)
14414 Phasecenter = float(PhCenBodeEntry.get())
14415 RelPhaseCenter.set(Phasecenter)
14417 PhCenBodeEntry.delete(0,
"end")
14418 PhCenBodeEntry.insert(0,0)
14419 RelPhaseCenter.set(0)
14422 Impedcenter = float(ImCenBodeEntry.get())
14423 ImpedanceCenter.set(Impedcenter)
14425 ImCenBodeEntry.delete(0,
"end")
14426 ImCenBodeEntry.insert(0,0)
14427 ImpedanceCenter.set(0)
14434 while (i <= Vdiv.get()):
14435 y = Y0TBP + i * GRHBP/Vdiv.get()
14436 Dline = [x1,y,x2,y]
14437 if i == 0
or i == Vdiv.get():
14438 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14440 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14441 Vaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
14442 Vaxis_label = str(Vaxis_value)
14443 Bodeca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
14444 if ShowCA_P.get() == 1
or ShowCB_P.get() == 1
or Show_Angle.get() == 1:
14445 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get()))) + Phasecenter
14446 Vaxis_label = str(Vaxis_value)
14447 Bodeca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
14448 if NetworkScreenStatus.get() > 0:
14449 if Show_Rseries.get() == 1
or Show_Xseries.get() == 1
or Show_Magnitude.get() == 1:
14450 RperDiv = float(ResScale.get())
14451 Vaxis_value = ( (RperDiv * Vdiv.get()/2) - (i * RperDiv) ) + Impedcenter
14452 if Vaxis_value > 500
or Vaxis_value < -500:
14453 Vaxis_value = Vaxis_value/1000.0
14454 if Vaxis_value > 5
or Vaxis_value < -5:
14455 Vaxis_label =
' {0:.0f}'.format(Vaxis_value) +
'K'
14457 Vaxis_label =
' {0:.1f}'.format(Vaxis_value) +
'K'
14458 elif Vaxis_value > 50
or Vaxis_value < -50:
14459 Vaxis_label =
' {0:.1f} '.format(Vaxis_value)
14460 elif Vaxis_value > 5
or Vaxis_value < -55:
14461 Vaxis_label =
' {0:.2f} '.format(Vaxis_value)
14463 Vaxis_label =
' {0:.3f} '.format(Vaxis_value)
14464 Bodeca.create_text(x1-23, y, text=Vaxis_label, fill=COLORtrace5, anchor=
"e", font=(
"arial", FontSize ))
14470 if HScaleBP.get() == 1:
14472 LogFStop = math.log10(EndFreq)
14474 LogFStart = math.log10(BeginFreq)
14477 LogFpixel = (LogFStop - LogFStart) / GRWBP
14479 while F <= EndFreq:
14482 LogF = math.log10(F)
14483 x = x1 + (LogF - LogFStart)/LogFpixel
14486 Dline = [x,y1,x,y2]
14487 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
14488 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14489 axis_label = str(F)
14490 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
14492 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14509 Freqdiv = (EndFreq - BeginFreq) / 10
14511 x = x1 + i * GRWBP/10
14512 Dline = [x,y1,x,y2]
14513 if i == 0
or i == 10:
14514 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14516 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14517 axis_value = BeginFreq + (i * Freqdiv)
14518 axis_label = str(axis_value)
14519 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
14522 Fpixel = (EndFreq - BeginFreq) / GRWBP
14523 LogFStop = math.log10(EndFreq)
14525 LogFStart = math.log10(BeginFreq)
14528 LogFpixel = (LogFStop - LogFStart) / GRWBP
14529 if ShowBPCur.get() > 0:
14530 Dline = [BPCursor, Y0TBP, BPCursor, Y0TBP+GRHBP]
14531 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
14533 if HScaleBP.get() == 1:
14534 xfreq = 10**(((BPCursor-x1)*LogFpixel) + LogFStart)
14536 xfreq = ((BPCursor-x1)*Fpixel)+BeginFreq
14537 XFString =
' {0:.2f} '.format(xfreq)
14538 V_label = XFString +
" Hz"
14539 Bodeca.create_text(BPCursor, Y0TBP+GRHBP+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
14542 if ShowBdBCur.get() > 0:
14543 Dline = [x1, BdBCursor, x1+GRWBP, BdBCursor]
14544 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
14545 if ShowBdBCur.get() == 1:
14547 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14548 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
14549 yvdB = ((Yc-BdBCursor)/Yconv)
14550 VdBString =
' {0:.1f} '.format(yvdB)
14551 V_label = VdBString +
" dBV"
14554 Yconv = float(GRHBP) / 360.0
14556 yvdB = 180 + ((Yc-BdBCursor)/Yconv) + Phasecenter
14557 VdBString =
' {0:.1f} '.format(yvdB)
14558 V_label = VdBString +
" Deg"
14559 Bodeca.create_text(x1+GRWBP+1, BdBCursor, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
14562 SmoothBool = SmoothCurvesBP.get()
14564 if len(TAFline) > 4:
14566 if OverRangeFlagA == 1:
14567 Bodeca.create_line(TAFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14569 Bodeca.create_line(TAFline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14570 if ShowMarkerBP.get() == 1:
14571 Peak_label =
' {0:.2f} '.format(PeakdbA) +
',' +
' {0:.1f} '.format(PeakfreqA)
14572 Bodeca.create_text(PeakxA, PeakyA, text=Peak_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
14573 if len(TBFline) > 4:
14575 if OverRangeFlagB == 1:
14576 Bodeca.create_line(TBFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14578 Bodeca.create_line(TBFline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14579 if ShowMarkerBP.get() == 1:
14580 Peak_label =
' {0:.2f} '.format(PeakdbB) +
',' +
' {0:.1f} '.format(PeakfreqB)
14581 Bodeca.create_text(PeakxB, PeakyB, text=Peak_label, fill=COLORtrace2, anchor=
"w", font=(
"arial", FontSize ))
14582 if len(TAPline) > 4:
14584 Bodeca.create_line(TAPline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14585 if len(TBPline) > 4:
14587 Bodeca.create_line(TBPline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14588 if ShowCA_RdB.get() == 1
and len(TAFRline) > 4:
14589 Bodeca.create_line(TAFRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14590 if ShowMarkerBP.get() == 1:
14591 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
14592 Bodeca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"e", font=(
"arial", FontSize ))
14593 if ShowCB_RdB.get() == 1
and len(TBFRline) > 4:
14594 Bodeca.create_line(TBFRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14595 if ShowMarkerBP.get() == 1:
14596 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
14597 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"w", font=(
"arial", FontSize ))
14598 if ShowCA_RP.get() == 1
and len(TAPRline) > 4:
14599 Bodeca.create_line(TAPRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14600 if ShowCB_RP.get() == 1
and len(TBPRline) > 4:
14601 Bodeca.create_line(TBPRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14602 if ShowMathBP.get() > 0
and len(TBPMline) > 4:
14603 Bodeca.create_line(TBPMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14604 if ShowMarkerBP.get() == 1:
14605 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
14606 Bodeca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"w", font=(
"arial", FontSize ))
14607 if ShowRMathBP.get() == 1
and len(TBPRMline) > 4:
14608 Bodeca.create_line(TBPRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14609 if ShowMarkerBP.get() == 1:
14610 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
14611 Bodeca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"w", font=(
"arial", FontSize ))
14612 if Show_Rseries.get() == 1
and len(TIARline) > 4:
14613 Bodeca.create_line(TIARline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14614 if Show_Xseries.get() == 1
and len(TIAXline) > 4:
14615 Bodeca.create_line(TIAXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14616 if Show_Magnitude.get() == 1
and len(TIAMagline) > 4:
14617 Bodeca.create_line(TIAMagline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14618 if Show_Angle.get() == 1
and len(TIAAngline) > 4:
14619 Bodeca.create_line(TIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14620 if Show_RseriesRef.get() == 1
and len(RefIARline) > 4:
14621 Bodeca.create_line(RefIARline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14622 if Show_XseriesRef.get() == 1
and len(RefIAXline) > 4:
14623 Bodeca.create_line(RefIAXline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14624 if Show_MagnitudeRef.get() == 1
and len(RefIAMagline) > 4:
14625 Bodeca.create_line(RefIAMagline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14626 if Show_AngleRef.get() == 1
and len(RefIAAngline) > 4:
14627 Bodeca.create_line(RefIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14629 Dline = [CurrentFreqX, Y0TBP, CurrentFreqX, Y0TBP+GRHBP]
14630 Bodeca.create_line(Dline, dash=(2,2), fill=COLORgrid, width=GridWidth.get())
14631 if HScaleBP.get() == 1:
14632 xfreq = 10**(((CurrentFreqX-x1)*LogFpixel) + LogFStart)
14634 xfreq = ((CurrentFreqX-x1)*Fpixel)+BeginFreq
14635 XFString =
' {0:.0f} '.format(xfreq)
14636 V_label = XFString +
" Hz"
14637 Bodeca.create_text(CurrentFreqX, Y0TBP+GRHBP+1, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
14640 txt =
" Sample rate: " + str(SAMPLErate)
14641 txt = txt +
" FFT samples: " + str(SMPfft)
14643 txt = txt +
" " + FFTwindowname
14647 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14650 txt = str(BeginFreq) +
" to " + str(EndFreq) +
" Hz"
14651 txt = txt +
" " + str(DBdivlist[DBdivindexBP.get()]) +
" dB/div"
14652 txt = txt +
" Level: " + str(DBlevelBP.get()) +
" dB "
14653 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
14657 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14659 if FreqTraceMode.get() == 1:
14660 txt =
"Normal mode "
14662 if FreqTraceMode.get() == 2:
14663 txt =
"Peak hold mode "
14665 if FreqTraceMode.get() == 3:
14666 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
14668 if ZEROstuffing.get() > 0:
14669 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
14671 if (RUNstatus.get() == 0):
14672 txt = txt +
" Stopped "
14674 if BodeDisp.get() == 1:
14675 txt = txt +
" Running "
14677 txt = txt +
" Display off "
14678 if FSweepMode.get() > 0:
14679 txt = txt +
" Freq Step = " + str(LoopNum.get())
14682 IDtxt = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14686 global FFTBuffA, FFTBuffB
14689 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14706 global PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
14709 global RsystemEntry
14712 global ImpedanceMagnitude
14713 global ImpedanceAngle
14714 global ImpedanceRseries, ImpedanceXseries
14717 DEG2RAD = (math.pi / 180.0)
14720 ResValue = float(RsystemEntry.get())
14724 VA = math.pow(10,(PeakdbA/20))
14725 VB = math.pow(10,(PeakdbB/20))
14726 VVangleCosine = math.cos(math.radians(PeakRelPhase))
14727 if IA_Ext_Conf.get() == 1:
14728 VAB = math.pow(10,(PeakdbAB/20))
14733 VI = math.sqrt(VA**2 + VZ**2 - 2*VA*VZ*VVangleCosine)
14734 costheta = (VA**2 + VI**2 - VZ**2)/(2 * VA * VI)
14735 Za = ResValue * VA / VI
14736 ImpedanceRseries = Za * costheta - ResValue
14737 ImpedanceMagnitude = ResValue * VZ / VI
14739 ImpedanceXseries = math.sqrt(abs(ImpedanceMagnitude**2 - ImpedanceRseries**2))
14741 if(PeakRelPhase < 0.0):
14742 ImpedanceXseries = -ImpedanceXseries
14743 if IA_Ext_Conf.get() == 1:
14744 ImpedanceRseries = -ImpedanceRseries
14745 ImpedanceAngle = math.atan2(ImpedanceXseries, ImpedanceRseries) / DEG2RAD
14748 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
14749 global FFTmemoryB, FFTresultB
14750 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
14751 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
14752 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakphaseA, PeakphaseB
14753 global PeakfreqA, PeakfreqB, GainCorEntry, PhaseCorEntry, PhaseCorrection
14759 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SMPfft
14760 global STARTsample, STOPsample, LoopNum, FSweepMode
14761 global TRACEmode, Two_X_Sample, IA_Ext_Conf
14762 global T1Vline, T2Vline, TMline, T1Pline, T2Pline
14766 global ImpedanceMagnitude
14767 global ImpedanceAngle
14768 global ImpedanceRseries, ImpedanceXseries
14771 TRACEsize = len(FFTresultA)
14772 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
14775 STARTsample = int(math.ceil(STARTsample))
14776 if Two_X_Sample.get() == 0:
14777 STOPsample = 45000 / Fsample
14779 STOPsample = 90000 / Fsample
14780 STOPsample = int(math.floor(STOPsample))
14782 RMScorr = 1.0 / SMPfft
14783 Powcorr = RMScorr **2
14785 GainCorrection = float(eval(GainCorEntry.get()))
14787 GainCorEntry.delete(0,END)
14788 GainCorEntry.insert(0, GainCorrection)
14791 PhaseCorrection = float(eval(PhaseCorEntry.get()))
14793 PhaseCorEntry.delete(0,END)
14794 PhaseCorEntry.insert(0, PhaseCorrection)
14796 MAXsample = TRACEsize
14797 if STARTsample > (MAXsample - 1):
14798 STARTsample = MAXsample - 1
14800 if STOPsample > MAXsample:
14801 STOPsample = MAXsample
14804 PeakfreqA = PeakfreqB = PeakfreqM = F = n * Fsample
14805 PeakphaseA = PhaseA[n]
14806 PeakphaseB = PhaseB[n]
14810 PeakdbA = 10 * math.log10(float(FFTresultA[n]))
14811 PeakdbB = 10 * math.log10(float(FFTresultB[n]))
14812 PeakMdb = PeakdbA - PeakdbB
14813 if IA_Ext_Conf.get() == 1:
14814 PeakdbAB = 10 * math.log10(float(FFTresultAB[n]))
14815 while n <= STOPsample:
14818 dbA = 10 * math.log10(float(FFTresultA[n]))
14824 PeakphaseA = PhaseA[n]
14828 dbB = 10 * math.log10(float(FFTresultB[n]))
14834 PeakphaseB = PhaseB[n]
14836 if IA_Ext_Conf.get() == 1:
14838 dbAB = 10 * math.log10(float(FFTresultAB[n]))
14841 if dbAB > PeakdbAB:
14843 PeakphaseAB = PhaseAB[n]
14844 RelPhase = PhaseA[n]-PhaseB[n]
14846 RelPhase = RelPhase - 360
14847 elif RelPhase < -180:
14848 RelPhase = RelPhase + 360
14849 if Two_X_Sample.get() == 0:
14850 PhErr = 0.0018 * n * Fsample
14851 RelPhase = RelPhase + PhErr - 12.0
14853 RelPhase = RelPhase - 9.0
14855 if IA_Ext_Conf.get() == 1:
14856 PeakRelPhase = PeakphaseAB-PeakphaseA
14858 PeakRelPhase = PeakphaseB-PeakphaseA
14860 if PeakRelPhase > 180:
14861 PeakRelPhase = PeakRelPhase - 360
14862 elif PeakRelPhase < -180:
14863 PeakRelPhase = PeakRelPhase + 360
14864 if Two_X_Sample.get() == 0:
14865 PhErr = 0.0018 * PeakSample * Fsample
14866 PeakRelPhase = PeakRelPhase + PhaseCorrection - PhErr
14868 PeakRelPhase = PeakRelPhase + PhaseCorrection
14869 PeakdbB = PeakdbB + GainCorrection
14874 global CANVASheightIA, CANVASwidthIA, IAca, TIAMline, TIAMRline
14875 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
14876 global PeakxM, PeakyM, PeakMdb, PeakfreqM, Two_X_Sample
14877 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
14878 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
14879 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
14880 global PeakphaseA, PeakphaseB, PeakRelPhase, PhaseCalEntry, CapZeroEntry
14881 global SmoothCurvesBP, TRACEwidth, GridWidth
14882 global COLORsignalband, COLORtext, COLORgrid, IASweepSaved
14883 global COLORtrace1, COLORtrace2, COLORtrace5, COLORtrace6
14884 global ResScale, DisplaySeries
14885 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14890 global FontSize, IAGridType
14892 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
14894 global TRACEaverage
14895 global FreqTraceMode
14897 global ImpedanceMagnitude
14898 global ImpedanceAngle
14899 global ImpedanceRseries, ImpedanceXseries, Cseries
14900 global LoopNum, NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
14901 global NSweepParallelR, NSweepParallelC, NSweepParallelL, NSweepSeriesC, NSweepSeriesC
14905 SmoothBool = SmoothCurvesBP.get()
14909 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
14910 xright = 10 + GRWIA/2 + ( Vdiv.get() * Radius )
14911 OhmsperPixel = float(ResScale.get())/Radius
14912 TRadius = Radius * Vdiv.get()
14915 if IAGridType.get() == 0:
14920 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
14921 OhmsperPixel = float(ResScale.get())/Radius
14922 TRadius = Radius * Vdiv.get()
14923 xright = 10 + xcenter + ( Vdiv.get() * Radius )
14924 while (i <= Vdiv.get()):
14925 x0 = xcenter - ( i * Radius )
14926 x1 = xcenter + ( i * Radius )
14927 y0 = ycenter - ( i * Radius )
14928 y1 = ycenter + ( i * Radius )
14929 axisvalue = float(ResScale.get()) * i
14930 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
14931 axisvalue = axisvalue / 1000
14932 ResTxt =
'{0:.1f}'.format(axisvalue)
14933 axis_label = str(ResTxt) +
"K"
14934 elif axisvalue >= 100.0
or axisvalue <= -100.0:
14935 ResTxt =
'{0:.1f}'.format(axisvalue)
14936 axis_label = str(ResTxt)
14937 elif axisvalue >= 10.0
or axisvalue <= -10.0:
14938 ResTxt =
'{0:.2f}'.format(axisvalue)
14939 axis_label = str(ResTxt)
14941 ResTxt =
'{0:.3f}'.format(axisvalue)
14942 axis_label = str(ResTxt)
14943 IAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
14944 IAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
14945 IAca.create_text(xright, y0, text=axis_label, fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14948 IAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
14949 IAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
14950 RAngle = math.radians(45)
14951 y = TRadius*math.sin(RAngle)
14952 x = TRadius*math.cos(RAngle)
14953 IAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14954 IAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14955 IAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
14956 IAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14957 IAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
14958 IAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
14964 x2 = X0LIA + TRadius * 2
14965 xcenter = x1 + (TRadius)
14966 OhmsperPixel = float(ResScale.get())/Radius
14967 while (i <= Vdiv.get()):
14968 y = Y0TIA + j * (TRadius/Vdiv.get())
14969 Dline = [x1,y,x2,y]
14970 if i == 0
or i == Vdiv.get()
or i == -Vdiv.get():
14971 IAca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14973 IAca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14974 axisvalue = float(ResScale.get()) * -i
14975 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
14976 axisvalue = axisvalue / 1000
14977 ResTxt =
'{0:.1f}'.format(axisvalue)
14978 axis_label = str(ResTxt) +
"K"
14980 ResTxt =
'{0:.0f}'.format(axisvalue)
14981 axis_label = str(ResTxt)
14982 IAca.create_text(x1-3, y, text=axis_label, fill=COLORtrace6, anchor=
"e", font=(
"arial", FontSize ))
14989 y2 = Y0TIA + TRadius * 2
14990 ycenter = y1 + (TRadius)
14992 while (i <= Vdiv.get()):
14993 x = x1 + j * (TRadius/Vdiv.get())
14994 Dline = [x,y1,x,y2]
14995 if i == 0
or i == Vdiv.get()
or i == -Vdiv.get():
14996 IAca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14998 IAca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
14999 axisvalue = float(ResScale.get()) * i
15000 if axisvalue >= 1000.0
or axisvalue <= -1000.0:
15001 axisvalue = axisvalue / 1000
15002 ResTxt =
'{0:.1f}'.format(axisvalue)
15003 axis_label = str(ResTxt) +
"K"
15005 ResTxt =
'{0:.0f}'.format(axisvalue)
15006 axis_label = str(ResTxt)
15007 IAca.create_text(x, y2+3, text=axis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
15012 if IASweepSaved.get() > 0:
15013 if len(TIAMRline) > 4:
15014 IAca.create_line(TIAMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15016 x1 = xcenter + ( ImpedanceRseries / OhmsperPixel )
15020 x1 = xcenter - xright
15021 IAca.create_line(xcenter, ycenter, x1, ycenter, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
15022 y1 = ycenter - ( ImpedanceXseries / OhmsperPixel )
15026 y1 = ycenter - xright
15029 IAca.create_line(xcenter, ycenter, xcenter, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
15030 MagRadius = ImpedanceMagnitude / OhmsperPixel
15031 y1 = ycenter - MagRadius*math.sin(math.radians(ImpedanceAngle))
15035 y1 = ycenter - xright
15036 x1 = xcenter + MagRadius*math.cos(math.radians(ImpedanceAngle))
15040 x1 = xcenter - xright
15041 IAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
15044 if len(NSweepSeriesMag) > 2:
15046 while index < len(NSweepSeriesMag):
15047 MagRadius = NSweepSeriesMag[index] / OhmsperPixel
15048 y1 = ycenter - MagRadius*math.sin(math.radians(NSweepSeriesAng[index]))
15052 y1 = ycenter - xright
15053 x1 = xcenter + MagRadius*math.cos(math.radians(NSweepSeriesAng[index]))
15057 x1 = xcenter - xright
15058 TIAMline.append(x1)
15059 TIAMline.append(y1)
15061 IAca.create_line(TIAMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15063 if OverRangeFlagA == 1:
15066 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15067 IAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15068 if OverRangeFlagB == 1:
15071 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15072 IAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15075 txt =
" Sample rate: " + str(SAMPLErate)
15076 txt = txt +
" FFT samples: " + str(SMPfft)
15078 txt = txt +
" " + FFTwindowname
15079 if NetworkScreenStatus.get() > 0:
15080 txt = txt +
" Sweep ON"
15082 txt = txt +
" Sweep OFF"
15085 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15087 x = X0LIA + GRWIA + 4
15089 txt =
"Gain " +
' {0:.2f} '.format(PeakdbB-PeakdbA) +
" dB"
15090 TXT9 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15092 txt =
"Phase " +
' {0:.2f} '.format(PeakRelPhase) +
" Degrees"
15093 TXT10 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15095 txt =
"Freq " +
' {0:.1f} '.format(PeakfreqA) +
" Hertz"
15096 TXT11 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15098 txt =
"Impedance Magnitude"
15099 TXT1 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15101 if ImpedanceMagnitude >= 1000.0
or ImpedanceMagnitude <= -1000.0:
15102 ImpedanceMagnitude = ImpedanceMagnitude / 1000
15103 txt =
'{0:.2f}'.format(ImpedanceMagnitude)
15104 txt = str(txt) +
"K"
15105 elif ImpedanceMagnitude >= 100.0
or ImpedanceMagnitude <= -100.0:
15106 txt =
' {0:.1f} '.format(ImpedanceMagnitude)
15107 elif ImpedanceMagnitude >= 10.0
or ImpedanceMagnitude <= -10.0:
15108 txt =
' {0:.2f} '.format(ImpedanceMagnitude)
15110 txt =
' {0:.3f} '.format(ImpedanceMagnitude)
15111 TXT2 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15113 txt =
"Impedance Angle"
15114 TXT3 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15116 txt =
' {0:.1f} '.format(ImpedanceAngle)
15117 TXT4 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15119 txt =
"Impedance R series"
15120 TXT5 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15122 if ImpedanceRseries >= 1000.0
or ImpedanceRseries <= -1000.0:
15123 ImpedanceRseries = ImpedanceRseries / 1000
15124 txt =
'{0:.2f}'.format(ImpedanceRseries)
15125 txt = str(txt) +
"K"
15126 elif ImpedanceRseries >= 100.0
or ImpedanceRseries <= -100.0:
15127 txt =
' {0:.1f} '.format(ImpedanceRseries)
15128 elif ImpedanceRseries >= 10.0
or ImpedanceRseries <= -10.0:
15129 txt =
' {0:.2f} '.format(ImpedanceRseries)
15131 txt =
' {0:.3f} '.format(ImpedanceRseries)
15132 TXT6 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15134 txt =
"Impedance X series"
15135 TXT7 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15137 if ImpedanceXseries >= 1000.0
or ImpedanceXseries <= -1000.0:
15138 ImpedanceXseries = ImpedanceXseries / 1000
15139 txt =
'{0:.2f}'.format(ImpedanceXseries)
15140 txt = str(txt) +
"K"
15141 if ImpedanceXseries >= 100.0
or ImpedanceXseries <= -100.0:
15142 txt =
' {0:.1f} '.format(ImpedanceXseries)
15143 elif ImpedanceXseries >= 10.0
or ImpedanceXseries <= -10.0:
15144 txt =
' {0:.2f} '.format(ImpedanceXseries)
15146 txt =
' {0:.3f} '.format(ImpedanceXseries)
15147 TXT8 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
15154 if ImpedanceXseries < 0:
15157 Cseries = -1 / ( 2 * math.pi * PeakfreqA * ImpedanceXseries )
15160 Qseries = 1/(2*math.pi*PeakfreqA*Cseries*ImpedanceRseries)
15161 Cparallel = Cseries * (Qseries**2 / (1+Qseries**2))
15162 Cparallel = Cparallel * 1E6
15163 Rparallel = ImpedanceRseries * (1+Qseries**2)
15164 Cseries = Cseries * 1E6
15165 if DisplaySeries.get() == 0:
15166 txt =
"Series Capacitance"
15167 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15170 Ctext = Cseries * 1E3
15172 Ctext = Ctext * 1E3
15173 CtextDis = Ctext + float(CapZeroEntry.get())
15174 txt =
' {0:.1f} '.format(CtextDis) +
"pF"
15176 txt =
' {0:.3f} '.format(Ctext) +
"nF"
15178 txt =
' {0:.3f} '.format(Cseries) +
"uF"
15179 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15182 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15185 Ctext = Cparallel * 1E3
15187 Ctext = Ctext * 1E3
15188 txt =
"Capacitance " +
' {0:.1f} '.format(Ctext) +
"pF"
15190 txt =
"Capacitance " +
' {0:.3f} '.format(Ctext) +
"nF"
15192 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"uF"
15193 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15195 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
15196 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15198 dissp = abs(ImpedanceRseries/ImpedanceXseries) * 100
15199 txt =
'D = {0:.2f} '.format(dissp) +
" %"
15200 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15202 elif ImpedanceXseries > 0:
15205 Lseries = ImpedanceXseries / ( 2 * 3.14159 * PeakfreqA )
15208 Qseries = (2*math.pi*PeakfreqA*Lseries)/ImpedanceRseries
15211 Lparallel = Lseries * ((1+Qseries**2) / Qseries**2)
15212 Lparallel = Lparallel * 1E3
15213 Rparallel = ImpedanceRseries * (1+Qseries**2)
15214 Lseries = Lseries * 1E3
15215 if DisplaySeries.get() == 0:
15216 txt =
"Series Inductance"
15217 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15220 Ltext = Lseries * 1E3
15221 txt =
' {0:.2f} '.format(Ltext) +
"uH"
15223 txt =
' {0:.2f} '.format(Lseries) +
"mH"
15224 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15227 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15230 Ltext = Lparallel * 1E3
15231 txt =
"Inductance " +
' {0:.2f} '.format(Ltext) +
"uH"
15233 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"mH"
15234 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15236 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
15237 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15239 qf = abs(ImpedanceXseries/ImpedanceRseries) * 100
15240 txt =
'Q = {0:.2f} '.format(qf)
15241 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15243 if LoopNum.get() > 1:
15244 if NetworkScreenStatus.get() > 0:
15245 NSweepSeriesR.append(ImpedanceRseries)
15246 NSweepSeriesX.append(ImpedanceXseries)
15247 NSweepSeriesMag.append(ImpedanceMagnitude)
15248 NSweepSeriesAng.append(ImpedanceAngle)
15249 NSweepParallelR.append(Rparallel)
15250 NSweepParallelC.append(Cparallel)
15251 NSweepParallelL.append(Lparallel)
15252 NSweepSeriesC.append(Cseries)
15253 NSweepSeriesL.append(Lseries)
15255 if Two_X_Sample.get() == 0:
15256 txt =
"0.0 to 45000 Hz"
15258 txt =
"0.0 to 90000 Hz"
15259 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
15263 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15265 if FreqTraceMode.get() == 1:
15266 txt =
"Normal mode "
15268 if FreqTraceMode.get() == 2:
15269 txt =
"Peak hold mode "
15271 if FreqTraceMode.get() == 3:
15272 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
15274 if ZEROstuffing.get() > 0:
15275 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
15277 if (RUNstatus.get() == 0):
15278 txt = txt +
" Stopped "
15280 txt = txt +
" Running "
15282 IDtxt = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15285 global IAca, GRWIA, XOLIA, GRHIA, Y0TIA, CANVASwidthIA, CANVASheightIA, FontSize
15287 CANVASwidthIA = event.width - 4
15288 CANVASheightIA = event.height - 4
15289 GRWIA = CANVASwidthIA - (2 * X0LIA) - int(21.25 * FontSize)
15290 GRHIA = CANVASheightIA - Y0TIA - int(2.25 * FontSize)
15295 global iawindow, IAca, logo, IAScreenStatus, RsystemEntry, IADisp, AWGSync, IASource
15296 global COLORcanvas, CANVASwidthIA, CANVASheightIA, RevDate, AWGAMode, AWGAShape, AWGBMode, AWG_2X
15297 global FFTwindow, CutDC, ColorMode, ResScale, GainCorEntry, PhaseCorEntry, DisplaySeries
15298 global GRWIA, X0LIA, GRHIA, Y0TIA, IA_Ext_Conf, DeBugMode, SWRev, CapZeroEntry
15299 global NetworkScreenStatus, IASweepSaved, IAGridType
15300 global FrameRefief, BorderSize
15302 if IAScreenStatus.get() == 0:
15303 IAScreenStatus.set(1)
15307 CANVASwidthIA = 170 + GRWIA + 2 * X0LIA
15308 CANVASheightIA = GRHIA + Y0TIA + 10
15312 if AWG_2X.get == 1:
15319 iawindow = Toplevel()
15320 iawindow.title(
"Impedance Analyzer " + SWRev + RevDate)
15321 iawindow.protocol(
"WM_DELETE_WINDOW", DestroyIAScreen)
15322 frame2iar = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
15323 frame2iar.pack(side=RIGHT, expand=NO, fill=BOTH)
15325 frame2ia = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
15326 frame2ia.pack(side=TOP, expand=YES, fill=BOTH)
15328 IAca = Canvas(frame2ia, width=CANVASwidthIA, height=CANVASheightIA, background=COLORcanvas, cursor=
'cross')
15329 IAca.bind(
"<Configure>", IACaresize)
15330 IAca.bind(
"<Return>", DoNothing)
15331 IAca.bind(
"<space>", onCanvasSpaceBar)
15332 IAca.pack(side=TOP, expand=YES, fill=BOTH)
15336 dropmenu = Frame( frame2iar )
15337 dropmenu.pack(side=TOP)
15339 IAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15340 IAFilemenu.menu = Menu(IAFilemenu, tearoff = 0 )
15341 IAFilemenu[
"menu"] = IAFilemenu.menu
15342 IAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
15343 IAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
15344 IAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
15345 IAFilemenu.menu.add_command(label=
"Save V Cal", command=BSaveCal)
15346 IAFilemenu.menu.add_command(label=
"Load V Cal", command=BLoadCal)
15347 IAFilemenu.menu.add_command(label=
"Save Data", command=BSaveDataIA)
15348 IAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenIA)
15349 IAFilemenu.menu.add_command(label=
"Help", command=BHelp)
15350 IAFilemenu.pack(side=LEFT, anchor=W)
15352 IAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15353 IAOptionmenu.menu = Menu(IAOptionmenu, tearoff = 0 )
15354 IAOptionmenu[
"menu"] = IAOptionmenu.menu
15355 IAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15356 IAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
15357 IAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15358 IAOptionmenu.menu.add_checkbutton(label=
'Sweep-on', variable=NetworkScreenStatus)
15359 IAOptionmenu.menu.add_checkbutton(label=
'Save Sweep', variable=IASweepSaved, command=BSaveIASweep)
15361 IAOptionmenu.menu.add_command(label=
"-Ext Config-", command=donothing)
15362 IAOptionmenu.menu.add_radiobutton(label=
'1', variable=IA_Ext_Conf, value=0)
15363 IAOptionmenu.menu.add_radiobutton(label=
'2', variable=IA_Ext_Conf, value=1)
15364 IAOptionmenu.menu.add_command(label=
"-Meas As-", command=donothing)
15365 IAOptionmenu.menu.add_radiobutton(label=
'Series', variable=DisplaySeries, value=0)
15366 IAOptionmenu.menu.add_radiobutton(label=
'Parallel', variable=DisplaySeries, value=1)
15367 IAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
15368 IAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
15369 IAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
15370 IAOptionmenu.pack(side=LEFT, anchor=W)
15372 rsemenu = Frame( frame2iar )
15373 rsemenu.pack(side=TOP)
15374 rseb2 = Button(rsemenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
15375 rseb2.pack(side=RIGHT)
15376 rseb3 = Button(rsemenu, text=
"Run", style=
"Run.TButton", command=BStartIA)
15377 rseb3.pack(side=RIGHT)
15379 IAFFTwindmenu = Menubutton(frame2iar, text=
"FFTwindow", style=
"W11.TButton")
15380 IAFFTwindmenu.menu = Menu(IAFFTwindmenu, tearoff = 0 )
15381 IAFFTwindmenu[
"menu"] = IAFFTwindmenu.menu
15382 IAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15383 IAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15384 IAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15385 IAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15386 IAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15387 IAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15388 IAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15389 IAFFTwindmenu.pack(side=TOP)
15391 smpmenu = Frame( frame2iar )
15392 smpmenu.pack(side=TOP)
15393 smpb1 = Button(smpmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
15394 smpb1.pack(side=LEFT)
15395 smpb2 = Button(smpmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
15396 smpb2.pack(side=LEFT)
15398 rsystem = Frame( frame2iar )
15399 rsystem.pack(side=TOP)
15400 rsystemlab = Label(rsystem, text=
"Ext Res")
15401 rsystemlab.pack(side=LEFT, anchor=W)
15402 RsystemEntry = Entry(rsystem, width=7, cursor=
'double_arrow')
15403 RsystemEntry.bind(
'<Return>', onTextKey)
15404 RsystemEntry.bind(
'<MouseWheel>', onTextScroll)
15405 RsystemEntry.bind(
"<Button-4>", onTextScroll)
15406 RsystemEntry.bind(
"<Button-5>", onTextScroll)
15407 RsystemEntry.bind(
'<Key>', onTextKey)
15408 RsystemEntry.pack(side=LEFT, anchor=W)
15409 RsystemEntry.delete(0,
"end")
15410 RsystemEntry.insert(4,1000)
15412 ressb = Frame( frame2iar )
15413 ressb.pack(side=TOP)
15414 reslab = Label(ressb, text=
"Ohms/div ")
15415 reslab.pack(side=LEFT)
15416 ResScale = Spinbox(ressb, width=7, cursor=
'double_arrow', values=ResScalediv)
15417 ResScale.bind(
'<MouseWheel>', onSpinBoxScroll)
15418 ResScale.bind(
"<Button-4>", onSpinBoxScroll)
15419 ResScale.bind(
"<Button-5>", onSpinBoxScroll)
15420 ResScale.pack(side=LEFT)
15421 ResScale.delete(0,
"end")
15422 ResScale.insert(0,500)
15424 GainCor = Frame( frame2iar )
15425 GainCor.pack(side=TOP)
15426 GainCorlab = Label(GainCor, text=
"Gain Cor dB")
15427 GainCorlab.pack(side=LEFT, anchor=W)
15428 GainCorEntry = Entry(GainCor, width=7, cursor=
'double_arrow')
15429 GainCorEntry.bind(
'<Return>', onTextKey)
15430 GainCorEntry.bind(
'<MouseWheel>', onTextScroll)
15431 GainCorEntry.bind(
"<Button-4>", onTextScroll)
15432 GainCorEntry.bind(
"<Button-5>", onTextScroll)
15433 GainCorEntry.bind(
'<Key>', onTextKey)
15434 GainCorEntry.pack(side=LEFT, anchor=W)
15435 GainCorEntry.delete(0,
"end")
15436 GainCorEntry.insert(4,0.0)
15438 PhaseCor = Frame( frame2iar )
15439 PhaseCor.pack(side=TOP)
15440 PhaseCorlab = Label(PhaseCor, text=
"Phase Cor")
15441 PhaseCorlab.pack(side=LEFT, anchor=W)
15442 PhaseCorEntry = Entry(PhaseCor, width=7, cursor=
'double_arrow')
15443 PhaseCorEntry.bind(
'<Return>', onTextKey)
15444 PhaseCorEntry.bind(
'<MouseWheel>', onTextScroll)
15445 PhaseCorEntry.bind(
"<Button-4>", onTextScroll)
15446 PhaseCorEntry.bind(
"<Button-5>", onTextScroll)
15447 PhaseCorEntry.bind(
'<Key>', onTextKey)
15448 PhaseCorEntry.pack(side=LEFT, anchor=W)
15449 PhaseCorEntry.delete(0,
"end")
15450 PhaseCorEntry.insert(4,0.0)
15452 capofflab = Label(frame2iar, text=
"Capacitance Offset")
15453 capofflab.pack(side=TOP)
15454 CapZero = Frame( frame2iar )
15455 CapZero.pack(side=TOP)
15456 CapZerobutton = Button(CapZero, text=
"Zero", style=
"W4.TButton", command=IACapZero)
15457 CapZerobutton.pack(side=LEFT, anchor=W)
15458 CapResetbutton = Button(CapZero, text=
"Reset", style=
"W5.TButton", command=IACapReset)
15459 CapResetbutton.pack(side=LEFT, anchor=W)
15460 CapZeroEntry = Entry(CapZero, width=6, cursor=
'double_arrow')
15461 CapZeroEntry.bind(
'<Return>', onTextKey)
15462 CapZeroEntry.bind(
'<MouseWheel>', onTextScroll)
15463 CapZeroEntry.bind(
"<Button-4>", onTextScroll)
15464 CapZeroEntry.bind(
"<Button-5>", onTextScroll)
15465 CapZeroEntry.bind(
'<Key>', onTextKey)
15466 CapZeroEntry.pack(side=LEFT, anchor=W)
15467 CapZeroEntry.delete(0,
"end")
15468 CapZeroEntry.insert(4,0.0)
15470 srclab = Label(frame2iar, text=
"Source")
15471 srclab.pack(side=TOP)
15472 extsrc1 = Radiobutton(frame2iar, text=
"Internal", variable=IASource, value=0, command=IASourceSet)
15473 extsrc1.pack(side=TOP)
15474 extsrc2 = Radiobutton(frame2iar, text=
"External", variable=IASource, value=1, command=IASourceSet)
15475 extsrc2.pack(side=TOP)
15477 gridmenu = Frame( frame2iar )
15478 gridmenu.pack(side=TOP)
15479 iagrid1= Radiobutton(frame2iar, text=
"Polar Grid", variable=IAGridType, value=0)
15480 iagrid1.pack(side=TOP)
15481 iagrid2 = Radiobutton(frame2iar, text=
"Rect Grid", variable=IAGridType, value=1)
15482 iagrid2.pack(side=TOP)
15484 dismiss1button = Button(frame2iar, text=
"Dismiss", style=
"W8.TButton", command=DestroyIAScreen)
15485 dismiss1button.pack(side=TOP)
15487 ADI1 = Label(frame2iar, image=logo, anchor=
"sw", compound=
"top")
15488 ADI1.pack(side=TOP)
15491 global iawindow, IAScreenStatus, IAca, IADisp
15493 IAScreenStatus.set(0)
15499 global TIAMline, TIAMRline, IASweepSaved
15501 if IASweepSaved.get() > 0:
15502 TIAMRline = TIAMline
15505 global Cseries, CapZeroEntry
15507 Ctext =
' {0:.1f} '.format(-Cseries * 1E6)
15508 CapZeroEntry.delete(0,
"end")
15509 CapZeroEntry.insert(6,Ctext)
15512 global CapZeroEntry
15514 CapZeroEntry.delete(0,
"end")
15515 CapZeroEntry.insert(4,0.0)
15518 global nqpwindow, NqPca, logo, NqPScreenStatus, NqPDisp
15519 global COLORcanvas, CANVASwidthNqP, CANVASheightNqP, RevDate
15520 global GRWNqP, X0LNqP, GRHNqP, Y0TNqP, DeBugMode, SWRev
15521 global NetworkScreenStatus, NqPSweepSaved
15522 global FrameRefief, BorderSize
15524 if NqPScreenStatus.get() == 0:
15525 NqPScreenStatus.set(1)
15527 CANVASwidthNqP = GRWNqP + (2 * X0LNqP)
15528 CANVASheightNqP = GRHNqP + Y0TNqP + 10
15529 nqpwindow = Toplevel()
15530 nqpwindow.title(
"Nyquist Plot " + SWRev + RevDate)
15531 nqpwindow.protocol(
"WM_DELETE_WINDOW", DestroyNqPScreen)
15533 frame2nqp = Frame(nqpwindow, borderwidth=BorderSize, relief=FrameRefief)
15534 frame2nqp.pack(side=TOP, expand=YES, fill=BOTH)
15536 NqPca = Canvas(frame2nqp, width=CANVASwidthNqP, height=CANVASheightNqP, background=COLORcanvas, cursor=
'cross')
15537 NqPca.bind(
"<Configure>", NqPCaresize)
15538 NqPca.bind(
"<Return>", DoNothing)
15539 NqPca.bind(
"<space>", onCanvasSpaceBar)
15540 NqPca.pack(side=TOP, expand=YES, fill=BOTH)
15543 global nqpwindow, NqPScreenStatus, NqPca, NqPDisp
15545 NqPScreenStatus.set(0)
15547 nqpwindow.destroy()
15550 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, FontSize
15552 CANVASwidthNqP = event.width - 4
15553 CANVASheightNqP = event.height - 4
15554 GRWNqP = CANVASwidthNqP - (2 * X0LNqP)
15555 GRHNqP = CANVASheightNqP - Y0TNqP - int(1.25 * FontSize)
15560 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, COLORtrace1
15561 global COLORgrid, GridWidth, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
15562 global FSweepAdB, FSweepBdB, FSweepBPh, FSweepAPh, ShowMathBP, NqPline, Two_X_Sample, TRACEwidth
15563 global Vdiv, FBins, FStep
15568 SmoothBool = SmoothCurvesBP.get()
15573 Radius = (GRWNqP-X0LNqP)/(1 + Vdiv.get() * 2)
15574 dBperPixel = float(DBdivlist[DBdivindexBP.get()])/Radius
15575 TRadius = Radius * Vdiv.get()
15577 x2 = X0LNqP + GRWNqP
15578 xright = 10 + xcenter + ( Vdiv.get() * Radius )
15579 while (i <= Vdiv.get()):
15580 x0 = xcenter - ( i * Radius )
15581 x1 = xcenter + ( i * Radius )
15582 y0 = ycenter - ( i * Radius )
15583 y1 = ycenter + ( i * Radius )
15584 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
15585 NqPca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
15586 NqPca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
15587 NqPca.create_text(xright, y0, text=str(dBaxis_value), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
15590 NqPca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
15591 NqPca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
15592 RAngle = math.radians(45)
15593 y = TRadius*math.sin(RAngle)
15594 x = TRadius*math.cos(RAngle)
15595 NqPca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
15596 NqPca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
15597 NqPca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
15598 NqPca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
15599 NqPca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
15600 NqPca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
15604 if len(FSweepAdB) > 4:
15605 for index
in range(len(FSweepAdB)):
15606 if index < len(FStep):
15607 F = FBins[int(FStep[index])]
15609 F = FBins[int(FStep[0])]
15611 dbA = 10 * math.log10(float(FSweepAdB[index]))
15612 dbB = 10 * math.log10(float(FSweepBdB[index]))
15613 if ShowMathBP.get() == 1:
15615 elif ShowMathBP.get() == 2:
15617 MagRadius = (-MdB / dBperPixel) + (DBlevelBP.get()/dBperPixel)
15619 RelPhase = FSweepBPh[index] - FSweepAPh[index]
15621 RelPhase = RelPhase - 360
15622 elif RelPhase < -180:
15623 RelPhase = RelPhase + 360
15624 if Two_X_Sample.get() == 0:
15626 RelPhase = RelPhase - PhErr
15628 RelPhase = RelPhase
15629 y1 = ycenter - MagRadius*math.sin(math.radians(RelPhase))
15633 y1 = ycenter - xright
15634 x1 = xcenter + MagRadius*math.cos(math.radians(RelPhase ))
15638 x1 = xcenter - xright
15641 NqPca.create_line(NqPline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15644 global NiCScreenStatus, NiCDisp
15645 global nicwindow, NiCca, logo, SWRev
15646 global COLORcanvas, CANVASwidthNic, CANVASheightNic, RevDate
15647 global GRWNiC, X0LNiC, GRHNiC, Y0TNiC, DeBugMode
15648 global NetworkScreenStatus, NiCSweepSaved
15649 global FrameRefief, BorderSize
15651 if NiCScreenStatus.get() == 0:
15652 NiCScreenStatus.set(1)
15654 CANVASwidthNic = GRWNiC + 18 + X0LNiC
15655 CANVASheightNic = GRHNiC + 60
15656 nicwindow = Toplevel()
15657 nicwindow.title(
"Nichols Plot " + SWRev + RevDate)
15658 nicwindow.protocol(
"WM_DELETE_WINDOW", DestroyNiCScreen)
15660 frame2nic = Frame(nicwindow, borderwidth=BorderSize, relief=FrameRefief)
15661 frame2nic.pack(side=TOP, expand=YES, fill=BOTH)
15663 NiCca = Canvas(frame2nic, width=CANVASwidthNic, height=CANVASheightNic, background=COLORcanvas, cursor=
'cross')
15664 NiCca.bind(
"<Configure>", NiCCaresize)
15665 NiCca.bind(
"<Return>", DoNothing)
15666 NiCca.bind(
"<space>", onCanvasSpaceBar)
15667 NiCca.pack(side=TOP, expand=YES, fill=BOTH)
15670 global nicwindow, NiCScreenStatus, NiCca, NiCDisp
15672 NiCScreenStatus.set(0)
15674 nicwindow.destroy()
15677 global NiCca, GRWNiC, XOLNiC, GRHNiC, Y0TNiC, CANVASwidthNic, CANVASheightNic, FontSize
15679 CANVASwidthNic = event.width - 4
15680 CANVASheightNic = event.height - 4
15681 GRWNiC = CANVASwidthNic - int(2.25 * FontSize) - X0LNiC
15682 GRHNiC = CANVASheightNic - int(7.5 * FontSize)
15687 global NiCline, NiCca, CANVASwidthNic, CANVASheightNic, X0LNiC, GRWNiC, Y0TNiC, GRHNiC, X0TNiC
15688 global COLORzeroline, GridWidth, COLORgrid, FSweepAdB, FSweepBdB, Two_X_Sample, ShowMathBP
15689 global FSweepBPh, FSweepAPh, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
15690 global Vdiv, FBins, FStep, PhCenBodeEntry, RelPhaseCenter
15694 Ymax = Y0TNiC + GRHNiC
15696 Xmax = X0LNiC + GRWNiC
15698 Phasecenter = int(PhCenBodeEntry.get())
15699 RelPhaseCenter.set(Phasecenter)
15701 PhCenBodeEntry.delete(0,
"end")
15702 PhCenBodeEntry.insert(0,0)
15703 RelPhaseCenter.set(0)
15707 SmoothBool = SmoothCurvesBP.get()
15712 x2 = X0TNiC = X0LNiC + GRWNiC
15713 mg_siz = GRWNiC/10.0
15714 mg_inc = mg_siz/5.0
15715 DegPerDiv = 360 / 10
15716 while (i < Vdiv.get()+1):
15717 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
15718 y = Y0TNiC + i * GRHNiC/Vdiv.get()
15719 Dline = [x1,y,x2,y]
15720 if dBaxis_value == 0:
15721 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
15726 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
15727 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15731 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15732 dBaxis_label = str(dBaxis_value)
15733 NiCca.create_text(x1-3, y, text=dBaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
15739 y2 = Y0TNiC + GRHNiC
15740 mg_siz = GRHNiC/10.0
15741 mg_inc = mg_siz/5.0
15744 x = X0LNiC + i * GRWNiC/10.0
15745 Dline = [x,y1,x,y2]
15746 axis_value = Phasecenter - 180 + (i * DegPerDiv)
15747 axis_label = str(axis_value)
15748 if ( axis_value == 0):
15749 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
15754 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
15755 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15759 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15760 NiCca.create_text(x, y2+3, text=axis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
15764 Yconv = float(GRHNiC) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
15765 Yc = float(Y0TNiC) + Yconv * (DBlevelBP.get())
15766 Xphconv = float(GRWNiC / 360.0)
15767 Xp = float(X0LNiC) + Xphconv * 180.0
15771 if len(FSweepAdB) > 4:
15773 for index
in range(len(FSweepAdB)):
15774 if index < len(FStep):
15775 F = FBins[int(FStep[index])]
15777 F = FBins[int(FStep[0])]
15779 dbA = 10 * math.log10(float(FSweepAdB[index]))
15780 dbB = 10 * math.log10(float(FSweepBdB[index]))
15781 if ShowMathBP.get() == 1:
15783 elif ShowMathBP.get() == 2:
15785 yb = Yc - Yconv * MdB
15791 RelPhase = FSweepBPh[index] - FSweepAPh[index]
15792 RelPhase = RelPhase - Phasecenter
15794 RelPhase = RelPhase - 360
15795 elif RelPhase < -180:
15796 RelPhase = RelPhase + 360
15797 if Two_X_Sample.get() == 0:
15799 RelPhase = RelPhase - PhErr
15801 RelPhase = RelPhase
15802 xa = Xp + Xphconv * RelPhase
15807 NiCline.append(int(xa + 0.5))
15808 NiCline.append(int(yb + 0.5))
15809 NiCca.create_line(NiCline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15812 global FFTBuffA, FFTBuffB
15815 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
15831 global FFTBuffA, FFTBuffB
15834 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
15853 if vat_btn.config(
'text')[-1] ==
'ON':
15854 vat_btn.config(text=
'OFF', style=
"Stop.TButton")
15856 vat_btn.config(text=
'ON', style=
"Run.TButton")
15861 if vabt_btn.config(
'text')[-1] ==
'ON':
15862 vabt_btn.config(text=
'OFF', style=
"Stop.TButton")
15864 vabt_btn.config(text=
'ON', style=
"Run.TButton")
15869 if vbt_btn.config(
'text')[-1] ==
'ON':
15870 vbt_btn.config(text=
'OFF', style=
"Stop.TButton")
15872 vbt_btn.config(text=
'ON', style=
"Run.TButton")
15877 if iat_btn.config(
'text')[-1] ==
'ON':
15878 iat_btn.config(text=
'OFF', style=
"Stop.TButton")
15880 iat_btn.config(text=
'ON', style=
"Run.TButton")
15885 if ibt_btn.config(
'text')[-1] ==
'ON':
15886 ibt_btn.config(text=
'OFF', style=
"Stop.TButton")
15888 ibt_btn.config(text=
'ON', style=
"Run.TButton")
15892 global phawindow, PhAca, logo, PhAScreenStatus, PhADisp, AWGSync
15893 global COLORcanvas, CANVASwidthPhA, CANVASheightPhA, RevDate, AWGAMode, AWGAShape, AWGBMode
15894 global FFTwindow, CutDC, ColorMode, RefPhase, CHvpdiv, CHipdiv
15895 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, DeBugMode, SWRev, PhAPlotMode
15896 global VScale, IScale, RefphEntry, MuxScreenStatus, AppendPhAData
15897 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
15898 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
15899 global FrameRefief, BorderSize
15901 if PhAScreenStatus.get() == 0:
15902 PhAScreenStatus.set(1)
15906 CANVASwidthPhA = 170 + GRWPhA + 2 * X0LPhA
15907 CANVASheightPhA = GRHPhA + Y0TPhA + 10
15908 phawindow = Toplevel()
15909 phawindow.title(
"Phase Analyzer " + SWRev + RevDate)
15910 phawindow.protocol(
"WM_DELETE_WINDOW", DestroyPhAScreen)
15911 frame2phar = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
15912 frame2phar.pack(side=RIGHT, expand=NO, fill=BOTH)
15914 frame2pha = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
15915 frame2pha.pack(side=TOP, expand=YES, fill=BOTH)
15917 PhAca = Canvas(frame2pha, width=CANVASwidthPhA, height=CANVASheightPhA, background=COLORcanvas, cursor=
'cross')
15918 PhAca.bind(
"<Configure>", PhACaresize)
15919 PhAca.bind(
"<Return>", DoNothing)
15920 PhAca.bind(
"<space>", onCanvasSpaceBar)
15921 PhAca.pack(side=TOP, expand=YES, fill=BOTH)
15923 if MuxScreenStatus.get() == 0:
15924 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
15926 RefPhase = (
"CA-V",
"CB-A",
"CB-B",
"CB-C",
"CB-D",
"CA-I",
"CB-I")
15929 dropmenu = Frame( frame2phar )
15930 dropmenu.pack(side=TOP)
15932 PhAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15933 PhAFilemenu.menu = Menu(PhAFilemenu, tearoff = 0 )
15934 PhAFilemenu[
"menu"] = PhAFilemenu.menu
15935 PhAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
15936 PhAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
15937 PhAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
15938 PhAFilemenu.menu.add_command(label=
"Save Data", command=BSavePhAData)
15939 PhAFilemenu.menu.add_checkbutton(label=
' - Append', variable=AppendPhAData)
15940 PhAFilemenu.menu.add_command(label=
"Plot From File", command=PlotPhAFromFile)
15941 PhAFilemenu.menu.add_radiobutton(label=
' - Vectors', variable=PhAPlotMode, value=0)
15942 PhAFilemenu.menu.add_radiobutton(label=
' - Outline', variable=PhAPlotMode, value=1)
15943 PhAFilemenu.menu.add_command(label=
"Help", command=BHelp)
15944 PhAFilemenu.pack(side=LEFT, anchor=W)
15946 PhAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15947 PhAOptionmenu.menu = Menu(PhAOptionmenu, tearoff = 0 )
15948 PhAOptionmenu[
"menu"] = PhAOptionmenu.menu
15949 PhAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15950 PhAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
15951 PhAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15953 PhAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
15954 PhAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
15955 PhAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
15956 PhAOptionmenu.pack(side=LEFT, anchor=W)
15958 rsphmenu = Frame( frame2phar )
15959 rsphmenu.pack(side=TOP)
15960 rsphb2 = Button(rsphmenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
15961 rsphb2.pack(side=RIGHT)
15962 rsphb3 = Button(rsphmenu, text=
"Run", style=
"Run.TButton", command=BStart)
15963 rsphb3.pack(side=RIGHT)
15965 PhAFFTwindmenu = Menubutton(frame2phar, text=
"FFTwindow", style=
"W11.TButton")
15966 PhAFFTwindmenu.menu = Menu(PhAFFTwindmenu, tearoff = 0 )
15967 PhAFFTwindmenu[
"menu"] = PhAFFTwindmenu.menu
15968 PhAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15969 PhAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15970 PhAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15971 PhAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15972 PhAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15973 PhAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15974 PhAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15975 PhAFFTwindmenu.pack(side=TOP)
15979 smphmenu = Frame( frame2phar )
15980 smphmenu.pack(side=TOP)
15981 smphb1 = Button(smphmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
15982 smphb1.pack(side=LEFT)
15983 smphb2 = Button(smphmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
15984 smphb2.pack(side=LEFT)
15986 refph = Frame( frame2phar )
15987 refph.pack(side=TOP)
15988 refphlab = Label(refph, text=
"Ref Phase")
15989 refphlab.pack(side=LEFT, anchor=W)
15990 RefphEntry = Spinbox(refph, width=5, cursor=
'double_arrow', values=RefPhase)
15991 RefphEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
15992 RefphEntry.bind(
"<Button-4>", onSpinBoxScroll)
15993 RefphEntry.bind(
"<Button-5>", onSpinBoxScroll)
15994 RefphEntry.pack(side=LEFT, anchor=W)
15995 RefphEntry.delete(0,
"end")
15996 RefphEntry.insert(0,
"CA-V")
15997 vatb = Frame( frame2phar )
15998 vatb.pack(side=TOP)
15999 vatblab = Label(vatb, text=
"CA-V ")
16000 vatblab.pack(side=LEFT)
16001 vat_btn = Button(vatb, text=
"OFF", style=
"Stop.TButton", width=4, command=VAtoggle)
16002 vat_btn.pack(side=LEFT)
16003 vbtb = Frame( frame2phar )
16004 vbtb.pack(side=TOP)
16005 if MuxScreenStatus.get() == 0:
16007 vbtblab = Label(vbtb, text=
"CB-V ")
16008 vbtblab.pack(side=LEFT)
16009 vbt_btn = Button(vbtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VBtoggle)
16010 vbt_btn.pack(side=LEFT)
16011 vabtb = Frame( frame2phar )
16012 vabtb.pack(side=TOP)
16013 vabtblab = Label(vabtb, text=
"CA-B V ")
16014 vabtblab.pack(side=LEFT)
16015 vabt_btn = Button(vabtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VABtoggle)
16016 vabt_btn.pack(side=LEFT)
16020 amuxlab = Label(frame2phar, text=
"Analog Mux In")
16021 amuxlab.pack(side=TOP)
16022 phbt1 = Checkbutton(frame2phar, text=
'CB-A ', style=
"Strace2.TCheckbutton", variable=ShowPB_A)
16023 phbt1.pack(side=TOP)
16024 phbt2 = Checkbutton(frame2phar, text=
'CB-B ', style=
"Strace6.TCheckbutton", variable=ShowPB_B)
16025 phbt2.pack(side=TOP)
16026 phbt3 = Checkbutton(frame2phar, text=
'CB-C ', style=
"Strace7.TCheckbutton", variable=ShowPB_C)
16027 phbt3.pack(side=TOP)
16028 phbt4 = Checkbutton(frame2phar, text=
'CB-D ', style=
"Strace4.TCheckbutton", variable=ShowPB_D)
16029 phbt4.pack(side=TOP)
16032 vssb = Frame( frame2phar )
16033 vssb.pack(side=TOP)
16034 vslab = Label(vssb, text=
"Volts/div ")
16035 vslab.pack(side=LEFT)
16036 VScale = Spinbox(vssb, width=7, cursor=
'double_arrow', values=CHvpdiv)
16037 VScale.bind(
'<MouseWheel>', onSpinBoxScroll)
16038 VScale.bind(
"<Button-4>", onSpinBoxScroll)
16039 VScale.bind(
"<Button-5>", onSpinBoxScroll)
16040 VScale.pack(side=LEFT)
16041 VScale.delete(0,
"end")
16042 VScale.insert(0,0.5)
16044 iatb = Frame( frame2phar )
16045 iatb.pack(side=TOP)
16046 iatblab = Label(iatb, text=
"CA-I ")
16047 iatblab.pack(side=LEFT)
16048 iat_btn = Button(iatb, text=
"OFF", style=
"Stop.TButton", width=4, command=IAtoggle)
16049 iat_btn.pack(side=LEFT)
16050 ibtb = Frame( frame2phar )
16051 ibtb.pack(side=TOP)
16052 ibtblab = Label(ibtb, text=
"CB-I ")
16053 ibtblab.pack(side=LEFT)
16054 ibt_btn = Button(ibtb, text=
"OFF", style=
"Stop.TButton", width=4, command=IBtoggle)
16055 ibt_btn.pack(side=LEFT)
16057 issb = Frame( frame2phar )
16058 issb.pack(side=TOP)
16059 islab = Label(issb, text=
"mA/div ")
16060 islab.pack(side=LEFT)
16061 IScale = Spinbox(issb, width=7, cursor=
'double_arrow', values=CHipdiv)
16062 IScale.bind(
'<MouseWheel>', onSpinBoxScroll)
16063 IScale.bind(
"<Button-4>", onSpinBoxScroll)
16064 IScale.bind(
"<Button-5>", onSpinBoxScroll)
16065 IScale.pack(side=LEFT)
16066 IScale.delete(0,
"end")
16067 IScale.insert(0,10.0)
16069 dismiss1button = Button(frame2phar, text=
"Dismiss", style=
"W8.TButton", command=DestroyPhAScreen)
16070 dismiss1button.pack(side=TOP)
16072 ADI1 = Label(frame2phar, image=logo, anchor=
"sw", compound=
"top")
16073 ADI1.pack(side=TOP)
16077 global phawindow, PhAScreenStatus, PhAca, PhADisp
16079 PhAScreenStatus.set(0)
16082 phawindow.destroy()
16086 global PhAca, GRWPhA, XOLPhA, GRHPhA, Y0TPhA, CANVASwidthPhA, CANVASheightPhA, FontSize
16088 CANVASwidthPhA = event.width - 4
16089 CANVASheightPhA = event.height - 4
16090 GRWPhA = CANVASwidthPhA - (2 * X0LPhA) - int(21.25 * FontSize)
16091 GRHPhA = CANVASheightPhA - Y0TPhA - int(2.25 * FontSize)
16109 global VAresult, VBresult, IAresult, IBresult, VABresult, PhaseIA, PhaseIB, PhaseVA, PhaseVB, PhaseVAB
16110 global VMAresult, VMBresult, VMCresult, VMDresult, PhaseVMD, PhaseVMA, PhaseVMB, PhaseVMC
16111 global PeakVA, PeakVB, PeakIA, PeakIB, PeakVAB
16112 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16113 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16114 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB, PeakphaseVAB
16115 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
16116 global PeakfreqVMA, PeakfreqVMB, PeakfreqVMC, PeakfreqVMD
16119 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
16120 global STARTsample, STOPsample, LoopNum, FSweepMode
16121 global TRACEmode, Two_X_Sample, MuxScreenStatus, MuxChan, ChopMuxMode
16127 if len(VAresult) < 32:
16129 TRACEsize = len(VAresult)
16130 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
16133 STARTsample = int(math.ceil(STARTsample))
16134 if Two_X_Sample.get() == 0:
16135 STOPsample = 45000 / Fsample
16137 STOPsample = 90000 / Fsample
16138 STOPsample = int(math.floor(STOPsample))
16141 MAXsample = TRACEsize
16142 if STARTsample > (MAXsample - 1):
16143 STARTsample = MAXsample - 1
16145 if STOPsample > MAXsample:
16146 STOPsample = MAXsample
16149 PeakVA = PeakVB = PeakIA = PeakIB = PeakVAB = 0.0
16150 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = F = n * Fsample
16151 PeakphaseVA = PhaseVA[n]
16152 if MuxScreenStatus.get() == 0:
16153 PeakphaseVB = PhaseVB[n]
16155 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
16156 PeakphaseIA = PhaseIA[n]
16157 PeakphaseIB = PhaseIB[n]
16158 PeakSampleVB = PeakSampleVA = PeakSampleIA = PeakSampleIB = n
16159 PeakSampleVMA = PeakSampleVMB = PeakSampleVMC = PeakSampleVMD = n
16160 if MuxChan == 0
or ChopMuxMode.get() > 0:
16162 PeakphaseVMA = PhaseVMA[n]
16164 PeakfreqVMA = PeakfreqVA
16165 if MuxChan == 1
or ChopMuxMode.get() > 0:
16167 PeakphaseVMB = PhaseVMB[n]
16169 PeakfreqVMB = PeakfreqVA
16170 if MuxChan == 2
or ChopMuxMode.get() > 0:
16172 PeakphaseVMC = PhaseVMC[n]
16174 PeakfreqVMC = PeakfreqVA
16175 if MuxChan == 3
or ChopMuxMode.get() > 0:
16177 PeakphaseVMD = PhaseVMD[n]
16179 PeakfreqVMD = PeakfreqVA
16181 while n <= STOPsample:
16184 VA = float(VAresult[n])
16190 PeakphaseVA = PhaseVA[n]
16193 if MuxScreenStatus.get() == 0:
16195 VAB = float(VABresult[n])
16201 PeakphaseVAB = PhaseVAB[n]
16205 VB = float(VBresult[n])
16211 PeakphaseVB = PhaseVB[n]
16214 if MuxChan == 0
or ChopMuxMode.get() > 0:
16216 VMA = float(VMAresult[n])
16222 PeakphaseVMA = PhaseVMA[n]
16224 if MuxChan == 1
or ChopMuxMode.get() > 0:
16226 VMB = float(VMBresult[n])
16232 PeakphaseVMB = PhaseVMB[n]
16234 if MuxChan == 2
or ChopMuxMode.get() > 0:
16236 VMC = float(VMCresult[n])
16242 PeakphaseVMC = PhaseVMC[n]
16244 if MuxChan == 3
or ChopMuxMode.get() > 0:
16246 VMD = float(VMDresult[n])
16252 PeakphaseVMD = PhaseVMD[n]
16255 IA = float(IAresult[n])
16261 PeakphaseIA = PhaseIA[n]
16265 IB = float(IBresult[n])
16271 PeakphaseIB = PhaseIB[n]
16276 if PeakSampleVA != PeakSampleIA:
16277 PeakphaseIA = PhaseIA[PeakSampleVA]
16278 PeakIA = IAresult[PeakSampleVA]
16279 if PeakSampleVB != PeakSampleIB
and MuxScreenStatus.get() == 0:
16280 PeakphaseIB = PhaseIB[PeakSampleVB]
16281 PeakIB = IBresult[PeakSampleVB]
16282 if MuxScreenStatus.get() > 0:
16283 if PeakSampleVA != PeakSampleVMA:
16285 PeakphaseVMA = PhaseVMA[PeakSampleVA]
16286 PeakVMA = float(VMAresult[PeakSampleVA])
16289 if PeakSampleVA != PeakSampleVMB:
16291 PeakphaseVMB = PhaseVMB[PeakSampleVA]
16292 PeakVMB = float(VMBresult[PeakSampleVA])
16295 if PeakSampleVA != PeakSampleVMC:
16297 PeakphaseVMC = PhaseVMC[PeakSampleVA]
16298 PeakVMC = float(VMCresult[PeakSampleVA])
16301 if PeakSampleVA != PeakSampleVMD:
16303 PeakphaseVMD = PhaseVMD[PeakSampleVA]
16304 PeakVMD = float(VMDresult[PeakSampleVA])
16310 global PeakVA, PeakVB, PeakIA, PeakIB
16311 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16312 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB
16313 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16314 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
16315 global PeakfreqVMA, PeakfreqVMB, PeakfreqVMC, PeakfreqVMD
16316 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
16317 global CMAphase, CMBphase, CMCphase, CMDphase
16318 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth
16319 global COLORsignalband, COLORtext, COLORgrid
16320 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
16321 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
16326 global FontSize, MuxScreenStatus, MuxChan, Mulx, ChopMuxMode
16328 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
16330 global TRACEaverage
16331 global FreqTraceMode
16332 global Vdiv, VScale, IScale
16333 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
16334 global AWGBMode, AWGBIOMode, ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
16335 global ShowC1_V, ShowC2_V, ShowC1_I, ShowC2_I, CHA_RC_HP, CHB_RC_HP
16336 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
16337 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
16338 global InOffA, InGainA, InOffB, InGainB
16339 global CurOffA, CurOffB, CurGainA, CurGainB
16341 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
16342 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
16343 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
16344 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
16345 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
16346 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
16347 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
16348 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
16349 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
16350 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
16351 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
16352 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
16360 ycenter = (GRHPhA/2) + 14
16361 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
16362 VoltsperPixel = float(VScale.get())/Radius
16363 mAperPixel = float(IScale.get())/Radius
16364 TRadius = Radius * Vdiv.get()
16366 x2 = X0LPhA + GRWPhA
16367 xright = 10 + xcenter + ( Vdiv.get() * Radius )
16368 while (i <= Vdiv.get()):
16369 x0 = xcenter - ( i * Radius )
16370 x1 = xcenter + ( i * Radius )
16371 y0 = ycenter - ( i * Radius )
16372 y1 = ycenter + ( i * Radius )
16373 VTxt =
'{0:.2f}'.format(float(VScale.get()) * i)
16374 ITxt =
'{0:.2f}'.format(float(IScale.get()) * i)
16375 TOffset = xright+(4*FontSize)
16376 PhAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
16377 PhAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
16378 PhAca.create_text(xright, y0, text=str(VTxt), fill=COLORtrace1, anchor=
"w", font=(
"arial", FontSize+2 ))
16379 if iat_btn.config(
'text')[-1] ==
'ON' or ibt_btn.config(
'text')[-1] ==
'ON':
16380 PhAca.create_text(TOffset, y0, text=str(ITxt), fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize+2 ))
16383 PhAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
16384 PhAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
16385 RAngle = math.radians(45)
16386 y = TRadius*math.sin(RAngle)
16387 x = TRadius*math.cos(RAngle)
16388 PhAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
16389 PhAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
16390 PhAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
16391 PhAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
16392 PhAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
16393 PhAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
16396 if Two_X_Sample.get() == 0:
16397 if AWGBMode.get() == 2
or AWGBIOMode.get() > 0:
16398 PhErr = 0.001675 * PeakfreqVA
16415 if ChopMuxMode.get() > 0:
16416 PhErrMB = 0.0072 * PeakfreqVMB
16417 PhErrMA = 0.0016 * PeakfreqVMA
16418 PhErrMD = 0.0054 * PeakfreqVMD
16419 PhErrMC = 0.0016 * PeakfreqVMC
16422 if RefphEntry.get() ==
"CA-V":
16424 CBVphase = PeakphaseVA - PeakphaseVB + PhErr
16425 CAIphase = PeakphaseVA - PeakphaseIA
16426 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
16427 CABVphase = PeakphaseVA - PeakphaseVAB
16428 elif RefphEntry.get() ==
"CB-V":
16430 CAVphase = PeakphaseVB - PeakphaseVA - PhErr
16431 CAIphase = PeakphaseVB - PeakphaseIA - PhErr
16432 CBIphase = PeakphaseVB - PeakphaseIB
16433 CABVphase = PeakphaseVB - PeakphaseVAB
16434 elif RefphEntry.get() ==
"CA-I":
16436 CAVphase = PeakphaseIA - PeakphaseVA
16437 CBVphase = PeakphaseIA - PeakphaseVB + PhErr
16438 CBIphase = PeakphaseIA - PeakphaseIB + PhErr
16439 CABVphase = PeakphaseIA - PeakphaseVAB
16440 elif RefphEntry.get() ==
"CB-I":
16442 CAVphase = PeakphaseIB - PeakphaseVA - PhErr
16443 CBVphase = PeakphaseIB - PeakphaseVB
16444 CAIphase = PeakphaseIB - PeakphaseIA - PhErr
16445 CABVphase = PeakphaseIB - PeakphaseVAB
16447 if MuxScreenStatus.get() > 0:
16449 if RefphEntry.get() ==
"CA-V":
16451 CMAphase = PeakphaseVA - PeakphaseVMA + PhErr
16452 CMBphase = PeakphaseVA - PeakphaseVMB + PhErr
16453 CMCphase = PeakphaseVA - PeakphaseVMC + PhErr
16454 CMDphase = PeakphaseVA - PeakphaseVMD + PhErr
16455 CAIphase = PeakphaseVA - PeakphaseIA
16456 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
16457 elif RefphEntry.get() ==
"CB-A":
16459 CAVphase = PeakphaseVMA - PeakphaseVA + PhErr
16460 CMBphase = PeakphaseVMA - PeakphaseVMB - PhErrMB
16461 CMCphase = PeakphaseVMA - PeakphaseVMC + PhErrMC
16462 CMDphase = PeakphaseVMA - PeakphaseVMD - PhErrMD
16463 CAIphase = PeakphaseVMA - PeakphaseIA
16464 CBIphase = PeakphaseVMA - PeakphaseIB + PhErr
16465 elif RefphEntry.get() ==
"CB-B":
16467 CAVphase = PeakphaseVMB - PeakphaseVA + PhErr
16468 CMAphase = PeakphaseVMB - PeakphaseVMA + PhErrMD
16469 CMCphase = PeakphaseVMB - PeakphaseVMC + PhErrMB
16470 CMDphase = PeakphaseVMB - PeakphaseVMD + PhErrMC
16471 CAIphase = PeakphaseVMB - PeakphaseIA
16472 CBIphase = PeakphaseVMB - PeakphaseIB + PhErr
16473 elif RefphEntry.get() ==
"CB-C":
16475 CAVphase = PeakphaseVMC - PeakphaseVA + PhErr
16476 CMAphase = PeakphaseVMC - PeakphaseVMA + PhErrMC
16477 CMBphase = PeakphaseVMC - PeakphaseVMB - PhErrMB
16478 CMDphase = PeakphaseVMC - PeakphaseVMD - PhErrMD
16479 CAIphase = PeakphaseVMC - PeakphaseIA
16480 CBIphase = PeakphaseVMC - PeakphaseIB + PhErr
16481 elif RefphEntry.get() ==
"CB-D":
16483 CAVphase = PeakphaseVMD - PeakphaseVA + PhErr
16484 CMAphase = PeakphaseVMD - PeakphaseVMA + PhErrMD
16485 CMBphase = PeakphaseVMD - PeakphaseVMB + PhErrMC
16486 CMCphase = PeakphaseVMD - PeakphaseVMC + PhErrMD
16487 CAIphase = PeakphaseVMD - PeakphaseIA
16488 CBIphase = PeakphaseVMD - PeakphaseIB + PhErr
16491 CAVphase = CAVphase - 360
16492 elif CAVphase < -180:
16493 CAVphase = CAVphase + 360
16495 CBVphase = CBVphase - 360
16496 elif CBVphase < -180:
16497 CBVphase = CBVphase + 360
16499 CAIphase = CAIphase - 360
16500 elif CAIphase < -180:
16501 CAIphase = CAIphase + 360
16503 CBIphase = CBIphase - 360
16504 elif CBIphase < -180:
16505 CBIphase = CBIphase + 360
16507 if vat_btn.config(
'text')[-1] ==
'ON':
16508 MagRadius = PeakVA / VoltsperPixel
16509 y1 = ycenter - MagRadius*math.sin(math.radians(CAVphase))
16513 y1 = ycenter - xright
16514 x1 = xcenter + MagRadius*math.cos(math.radians(CAVphase))
16518 x1 = xcenter - xright
16519 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
16520 if MuxScreenStatus.get() == 0:
16521 if vbt_btn.config(
'text')[-1] ==
'ON':
16522 MagRadius = PeakVB / VoltsperPixel
16523 y1 = ycenter - MagRadius*math.sin(math.radians(CBVphase))
16527 y1 = ycenter - xright
16528 x1 = xcenter + MagRadius*math.cos(math.radians(CBVphase))
16532 x1 = xcenter - xright
16533 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
16535 if ShowPB_A.get() > 0:
16537 CMAphase = CMAphase - 360
16538 elif CMAphase < -180:
16539 CMAphase = CMAphase + 360
16540 MagRadius = PeakVMA / VoltsperPixel
16541 y1 = ycenter - MagRadius*math.sin(math.radians(CMAphase))
16545 y1 = ycenter - xright
16546 x1 = xcenter + MagRadius*math.cos(math.radians(CMAphase))
16550 x1 = xcenter - xright
16551 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
16552 if ShowPB_B.get() > 0:
16554 CMBphase = CMBphase - 360
16555 elif CMBphase < -180:
16556 CMBphase = CMBphase + 360
16557 MagRadius = PeakVMB / VoltsperPixel
16558 y1 = ycenter - MagRadius*math.sin(math.radians(CMBphase))
16562 y1 = ycenter - xright
16563 x1 = xcenter + MagRadius*math.cos(math.radians(CMBphase))
16567 x1 = xcenter - xright
16568 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
16569 if ShowPB_C.get() > 0:
16571 CMCphase = CMCphase - 360
16572 elif CMCphase < -180:
16573 CMCphase = CMCphase + 360
16574 MagRadius = PeakVMC / VoltsperPixel
16575 y1 = ycenter - MagRadius*math.sin(math.radians(CMCphase))
16579 y1 = ycenter - xright
16580 x1 = xcenter + MagRadius*math.cos(math.radians(CMCphase))
16584 x1 = xcenter - xright
16585 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace7, arrow=
"last", width=TRACEwidth.get())
16586 if ShowPB_D.get() > 0:
16588 CMDphase = CMDphase - 360
16589 elif CMDphase < -180:
16590 CMDphase = CMDphase + 360
16591 MagRadius = PeakVMD / VoltsperPixel
16592 y1 = ycenter - MagRadius*math.sin(math.radians(CMDphase))
16596 y1 = ycenter - xright
16597 x1 = xcenter + MagRadius*math.cos(math.radians(CMDphase))
16601 x1 = xcenter - xright
16602 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
16603 if iat_btn.config(
'text')[-1] ==
'ON':
16604 MagRadius = PeakIA / mAperPixel
16605 y1 = ycenter - MagRadius*math.sin(math.radians(CAIphase))
16609 y1 = ycenter - xright
16610 x1 = xcenter + MagRadius*math.cos(math.radians(CAIphase))
16614 x1 = xcenter - xright
16615 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace3, arrow=
"last", width=TRACEwidth.get())
16616 if ibt_btn.config(
'text')[-1] ==
'ON':
16617 MagRadius = PeakIB / mAperPixel
16618 y1 = ycenter - MagRadius*math.sin(math.radians(CBIphase))
16622 y1 = ycenter - xright
16623 x1 = xcenter + MagRadius*math.cos(math.radians(CBIphase))
16627 x1 = xcenter - xright
16628 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
16629 if MuxScreenStatus.get() == 0:
16630 if vabt_btn.config(
'text')[-1] ==
'ON':
16631 MagRadius = PeakVAB / VoltsperPixel
16633 y1 = ycenter - MagRadius*math.sin(math.radians(CABVphase))
16637 y1 = ycenter - xright
16638 x1 = xcenter + MagRadius*math.cos(math.radians(CABVphase))
16642 x1 = xcenter - xright
16643 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
16645 if OverRangeFlagA == 1:
16646 x = X0LPhA+GRWPhA+10
16647 y = Y0TPhA+GRHPhA-40
16648 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
16649 PhAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
16650 if OverRangeFlagB == 1:
16651 x = X0LPhA+GRWPhA+10
16652 y = Y0TPhA+GRHPhA-10
16653 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
16654 PhAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
16656 txt =
" Sample rate: " + str(SAMPLErate)
16657 txt = txt +
" FFT samples: " + str(SMPfft)
16658 txt = txt +
" " + FFTwindowname
16662 idTXT = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
16664 x = X0LPhA + GRWPhA + 4
16666 if ChopMuxMode.get() == 0:
16667 txt =
"CA " +
' {0:.3f} '.format(PeakVA) +
" RMS V"
16668 TXT9 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
16670 if MuxScreenStatus.get() == 0:
16671 txt =
"CB " +
' {0:.3f} '.format(PeakVB) +
" RMS V"
16672 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16675 if ShowPB_A.get() > 0:
16676 txt =
"Mux A " +
' {0:.3f} '.format(PeakVMA) +
" RMS V"
16677 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16679 if ShowPB_B.get() > 0:
16680 txt =
"Mux B " +
' {0:.3f} '.format(PeakVMB) +
" RMS V"
16681 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
16683 if ShowPB_C.get() > 0:
16684 txt =
"Mux C " +
' {0:.3f} '.format(PeakVMC) +
" RMS V"
16685 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
16687 if ShowPB_D.get() > 0:
16688 txt =
"Mux D " +
' {0:.3f} '.format(PeakVMD) +
" RMS V"
16689 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16691 if iat_btn.config(
'text')[-1] ==
'ON':
16692 txt =
"CA " +
' {0:.2f} '.format(PeakIA) +
" RMS mA"
16693 TXT11 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
16695 if ibt_btn.config(
'text')[-1] ==
'ON':
16696 txt =
"CB " +
' {0:.2f} '.format(PeakIB) +
" RMS mA"
16697 TXT12 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16699 if ChopMuxMode.get() == 0:
16700 txt =
"CA V Phase " +
' {0:.1f} '.format(CAVphase) +
" Degrees"
16701 TXT13 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
16703 if MuxScreenStatus.get() == 0:
16704 txt =
"CB V Phase " +
' {0:.1f} '.format(CBVphase) +
" Degrees"
16705 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16708 if ShowPB_A.get() > 0:
16709 txt =
"Mux A Phase " +
' {0:.1f} '.format(CMAphase) +
" Degrees"
16710 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
16712 if ShowPB_B.get() > 0:
16713 txt =
"Mux B Phase " +
' {0:.1f} '.format(CMBphase) +
" Degrees"
16714 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
16716 if ShowPB_C.get() > 0:
16717 txt =
"Mux C Phase " +
' {0:.1f} '.format(CMCphase) +
" Degrees"
16718 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
16720 if ShowPB_D.get() > 0:
16721 txt =
"Mux D Phase " +
' {0:.1f} '.format(CMDphase) +
" Degrees"
16722 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16724 if iat_btn.config(
'text')[-1] ==
'ON':
16725 txt =
"CA I Phase " +
' {0:.1f} '.format(CAIphase) +
" Degrees"
16726 TXT15 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
16728 if ibt_btn.config(
'text')[-1] ==
'ON':
16729 txt =
"CB I Phase " +
' {0:.1f} '.format(CBIphase) +
" Degrees"
16730 TXT16 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
16733 if ChopMuxMode.get() == 0:
16734 txt =
"CA-V Freq " +
' {0:.1f} '.format(PeakfreqVA) +
" Hertz"
16735 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
16738 txt =
"Mux A Freq " +
' {0:.1f} '.format(PeakfreqVMA) +
" Hertz"
16739 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
16744 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
16745 if ETSDisp.get() > 0:
16746 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
16749 if ShowC1_V.get() == 1:
16750 if MeasAHW.get() == 1:
16751 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
16752 if MeasALW.get() == 1:
16753 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
16754 if MeasADCy.get() == 1:
16755 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
16756 if MeasAPER.get() == 1:
16757 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
16758 if MeasAFREQ.get() == 1:
16759 txt = txt +
" CA Freq = "
16760 ChaF = float(CHAfreq*Mulx)
16762 V1String =
' {0:.2f} '.format(ChaF)
16763 txt = txt + str(V1String) +
" Hz "
16764 if ChaF > 1000
and ChaF < 1000000:
16765 V1String =
' {0:.2f} '.format(ChaF/1000)
16766 txt = txt + str(V1String) +
" KHz "
16768 V1String =
' {0:.2f} '.format(ChaF/1000000)
16769 txt = txt + str(V1String) +
" MHz "
16771 if ShowC2_V.get() == 1:
16772 if MeasBHW.get() == 1:
16773 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
16774 if MeasBLW.get() == 1:
16775 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
16776 if MeasBDCy.get() == 1:
16777 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
16778 if MeasBPER.get() == 1:
16779 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
16780 if MeasBFREQ.get() == 1:
16781 txt = txt +
" CB Freq = "
16782 ChaF = float(CHBfreq*Mulx)
16784 V1String =
' {0:.2f} '.format(ChaF)
16785 txt = txt + str(V1String) +
" Hz "
16786 if ChaF > 1000
and ChaF < 1000000:
16787 V1String =
' {0:.2f} '.format(ChaF/1000)
16788 txt = txt + str(V1String) +
" KHz "
16790 V1String =
' {0:.2f} '.format(ChaF/1000000)
16791 txt = txt + str(V1String) +
" MHz "
16793 if MuxScreenStatus.get() == 0:
16794 if MeasPhase.get() == 1:
16795 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
16796 if MeasDelay.get() == 1:
16797 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
16800 y = YBot + int(2.5 *FontSize)
16801 TXT18 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16803 if ShowC1_V.get() == 1:
16805 if CHA_RC_HP.get() == 1:
16809 if MeasDCV1.get() == 1:
16810 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
16811 if MeasMaxV1.get() == 1:
16812 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
16813 if MeasTopV1.get() == 1:
16814 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
16815 if MeasMinV1.get() == 1:
16816 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
16817 if MeasBaseV1.get() == 1:
16818 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
16819 if MeasMidV1.get() == 1:
16820 MidV1 = (MaxV1+MinV1)/2.0
16821 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
16822 if MeasPPV1.get() == 1:
16824 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
16825 if MeasRMSV1.get() == 1:
16826 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
16827 if MeasRMSVA_B.get() == 1:
16828 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
16829 if MeasDiffAB.get() == 1:
16830 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
16831 if MeasUserA.get() == 1:
16833 TempValue = eval(UserAString)
16834 V1String =
' {0:.4f} '.format(TempValue)
16837 txt = txt + UserALabel +
" = " + V1String
16838 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
16840 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
16841 txt = txt +
"CHA: "
16843 if ShowC1_I.get() == 1:
16844 if MeasDCI1.get() == 1:
16845 V1String =
' {0:.2f} '.format(DCI1)
16846 txt = txt +
" AvgI = " + V1String
16847 if AWGAShape.get() == 0:
16849 Resvalue = (DCV1/DCI1)*1000
16850 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
16852 txt = txt +
" Res = OverRange"
16853 if MeasMaxI1.get() == 1:
16854 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
16855 if MeasMinI1.get() == 1:
16856 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
16857 if MeasMidI1.get() == 1:
16858 MidI1 = (MaxI1+MinI1)/2.0
16859 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
16860 if MeasPPI1.get() == 1:
16862 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
16863 if MeasRMSI1.get() == 1:
16864 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
16867 y = YBot + int(4*FontSize)
16868 TXT19 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16871 if MuxScreenStatus.get() == 1:
16873 if Show_CBA.get() > 0:
16875 elif Show_CBB.get() > 0:
16877 elif Show_CBC.get() > 0:
16879 elif Show_CBD.get() > 0:
16881 if MeasPhase.get() == 1:
16882 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
16883 if MeasDelay.get() == 1:
16884 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
16885 if MeasUserB.get() == 1:
16887 TempValue = eval(UserBString)
16888 V1String =
' {0:.4f} '.format(TempValue)
16891 txt = txt + UserBLabel +
" = " + V1String
16892 if ShowC2_V.get() == 1:
16893 if CHB_RC_HP.get() == 1:
16897 if MeasDCV2.get() == 1:
16898 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
16899 if MeasMaxV2.get() == 1:
16900 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
16901 if MeasTopV2.get() == 1:
16902 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
16903 if MeasMinV2.get() == 1:
16904 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
16905 if MeasBaseV2.get() == 1:
16906 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
16907 if MeasMidV2.get() == 1:
16908 MidV2 = (MaxV2+MinV2)/2.0
16909 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
16910 if MeasPPV2.get() == 1:
16912 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
16913 if MeasRMSV2.get() == 1:
16914 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
16915 if MeasDiffBA.get() == 1:
16916 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
16917 if MeasUserB.get() == 1:
16919 TempValue = eval(UserBString)
16920 V1String =
' {0:.4f} '.format(TempValue)
16923 txt = txt + UserBLabel +
" = " + V1String
16924 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
16926 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
16927 txt = txt +
"CHB: "
16928 if ShowC2_I.get() == 1:
16929 if MeasDCI2.get() == 1:
16930 V1String =
' {0:.2f} '.format(DCI2)
16931 txt = txt +
" AvgI = " + V1String
16932 if AWGBShape.get() == 0:
16934 Resvalue = (DCV2/DCI2)*1000
16935 R1String =
' {0:.1f} '.format(Resvalue)
16936 txt = txt +
" Res = " + R1String
16938 txt = txt +
" Res = OverRange"
16939 if MeasMaxI2.get() == 1:
16940 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
16941 if MeasMinI2.get() == 1:
16942 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
16943 if MeasMidI2.get() == 1:
16944 MidI2 = (MaxI2+MinI2)/2.0
16945 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
16946 if MeasPPI2.get() == 1:
16948 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
16949 if MeasRMSI2.get() == 1:
16950 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
16953 y = YBot + int(5.5 *FontSize)
16954 TXT20 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
16957 global PeakVA, PeakVB, PeakIA, PeakIB
16958 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
16959 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
16960 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
16961 global CMAphase, CMBphase, CMCphase, CMDphase
16962 global MuxScreenStatus, AppendPhAData, PhADatafilename
16963 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
16964 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
16967 if AppendPhAData.get() == 0:
16968 PhADatafilename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
16969 DataFile = open(PhADatafilename,
'a')
16970 DataFile.write(
'Amplitude, Phase, @ ' + str(PeakfreqVA) +
' Hertz\n')
16972 if vat_btn.config(
'text')[-1] ==
'ON':
16973 DataFile.write( str(PeakVA) +
', ' + str(CAVphase) +
', CA-V\n')
16974 if MuxScreenStatus.get() == 0:
16975 if vbt_btn.config(
'text')[-1] ==
'ON':
16976 DataFile.write( str(PeakVB) +
', ' + str(CBVphase) +
', CB-V\n')
16978 if ShowPB_A.get() > 0:
16979 DataFile.write( str(PeakVMA) +
', ' + str(CMAphase) +
', Mux A\n')
16980 if ShowPB_B.get() > 0:
16981 DataFile.write( str(PeakVMB) +
', ' + str(CMBphase) +
', Mux B\n')
16982 if ShowPB_C.get() > 0:
16983 DataFile.write( str(PeakVMC) +
', ' + str(CMCphase) +
', Mux C\n')
16984 if ShowPB_D.get() > 0:
16985 DataFile.write( str(PeakVMD) +
', ' + str(CMDphase) +
', Mux D\n')
16986 if iat_btn.config(
'text')[-1] ==
'ON':
16987 DataFile.write( str(PeakIA) +
', ' + str(CAIphase) +
', CA-I\n')
16988 if ibt_btn.config(
'text')[-1] ==
'ON':
16989 DataFile.write( str(PeakIB) +
', ' + str(CBIphase) +
', CB-I\n')
16993 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth, PhAPlotMode
16994 global COLORsignalband, COLORtext, COLORgrid, SmoothCurves
16995 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
16996 global GRWPhA, GRHPhA, X0LPhA, Vdiv, VScale, IScale
16998 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
17001 ycenter = (GRHPhA/2) + 14
17002 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
17003 VoltsperPixel = float(VScale.get())/Radius
17004 mAperPixel = float(IScale.get())/Radius
17005 TRadius = Radius * Vdiv.get()
17007 x2 = X0LPhA + GRWPhA
17011 CSVFile = open(filename)
17012 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
17014 csv_f = csv.reader(CSVFile, dialect)
17017 PeakMag = float(row[0])
17018 PeakPhase = float(row[1])
17019 if row[2] ==
"CA-I" or row[2] ==
"CB-I":
17020 MagRadius = PeakMag / mAperPixel
17022 MagRadius = PeakMag / VoltsperPixel
17024 y1 = ycenter - MagRadius*math.sin(math.radians(PeakPhase))
17028 y1 = ycenter - xright
17029 x1 = xcenter + MagRadius*math.cos(math.radians(PeakPhase))
17033 x1 = xcenter - xright
17034 if PhAPlotMode.get() == 0:
17035 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
17037 PhATrace.append(x1)
17038 PhATrace.append(y1)
17040 print(
'skipping non-numeric row')
17041 if PhAPlotMode.get() == 1:
17042 PhAca.create_line(PhATrace, fill=COLORtrace5, smooth=SmoothCurves.get(), splinestep=5, width=TRACEwidth.get())
17045 showwarning(
"WARNING",
"No such file found or wrong format!")
17049 global FFTmemoryA, FFTresultA, SMPfft
17050 global FFTmemoryB, FFTresultB
17051 global PhaseA, PhaseB, freqwindow
17052 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, ShowC1_VdB, ShowC2_VdB
17055 if ShowC1_VdB.get() == 1:
17056 TRACEsize = len(FFTresultA)
17057 elif ShowC2_VdB.get() == 1:
17058 TRACEsize = len(FFTresultB)
17062 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=freqwindow)
17065 PSD = askyesno(
"Mag/Root Hz? ",
"Save Mag in V/sqrt Hz? (yes) or (No):\n", parent=freqwindow)
17066 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
17067 filename =
"Spectrum-" + tme
17068 filename = filename +
".csv"
17070 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
17071 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=freqwindow)
17072 DataFile = open(filename,
'a')
17073 HeaderString =
'Frequency-#, '
17074 if ShowC1_VdB.get() == 1:
17076 HeaderString = HeaderString +
'CA-dB, '
17078 HeaderString = HeaderString +
'CA-Mag, '
17079 if ShowC2_VdB.get() == 1:
17081 HeaderString = HeaderString +
'CB-dB, '
17083 HeaderString = HeaderString +
'CB-Mag, '
17084 if ShowC1_P.get() == 1:
17085 HeaderString = HeaderString +
'Phase A-B, '
17086 if ShowC2_P.get() == 1:
17087 HeaderString = HeaderString +
'Phase B-A, '
17088 HeaderString = HeaderString +
'\n'
17089 DataFile.write( HeaderString )
17091 FBinWidth = float(SAMPLErate / 2.0) / (TRACEsize - 1)
17094 while n < TRACEsize:
17097 if ShowC1_VdB.get() == 1:
17098 V = 10 * math.log10(float(FFTresultA[n]))
17102 V = V/math.sqrt(FBinWidth)
17103 txt = txt +
"," + str(V)
17104 if ShowC2_VdB.get() == 1:
17105 V = 10 * math.log10(float(FFTresultB[n]))
17109 V = V/math.sqrt(FBinWidth)
17110 txt = txt +
"," + str(V)
17111 if ShowC1_P.get() == 1:
17112 RelPhase = PhaseA[n]-PhaseB[n]
17114 RelPhase = RelPhase - 360
17115 elif RelPhase < -180:
17116 RelPhase = RelPhase + 360
17117 txt = txt +
"," + str(RelPhase)
17118 if ShowC2_P.get() == 1:
17119 RelPhase = PhaseB[n]-PhaseA[n]
17121 RelPhase = RelPhase - 360
17122 elif RelPhase < -180:
17123 RelPhase = RelPhase + 360
17124 txt = txt +
"," + str(RelPhase)
17126 DataFile.write(txt)
17133 global CANVASheightF, CANVASwidthF, SmoothCurvesSA
17134 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
17135 global PeakxM, PeakyM, PeakMdb, PeakfreqM
17136 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
17137 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
17138 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM, PeakIndexA, PeakIndexB, Fsample
17140 global COLORsignalband, COLORtext
17141 global COLORtrace1, COLORtrace2
17142 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
17146 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
17153 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SingleShotSA, HScale, HarmonicMarkers
17155 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
17156 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
17157 global ShowC1_P, ShowC2_P, ShowRA_VdB, ShowRB_VdB, ShowMarker
17158 global ShowRA_P, ShowRB_P, ShowMathSA, FreqDisp, ShowAWGASA, ShowAWGBSA
17159 global ShowFCur, ShowdBCur, FCursor, dBCursor
17160 global T1Fline, T2Fline, T1Pline, T1FRline, T2FRline, TFMline, TFRMline
17161 global T1PRline, T2PRline, TAFline, TBFline
17162 global TRACEaverage
17163 global FreqTraceMode
17168 FBinWidth = float(SAMPLErate / 2.0) / (SMPfft - 1)
17171 StartFrequency = float(StartFreqEntry.get())
17173 StartFreqEntry.delete(0,
"end")
17174 StartFreqEntry.insert(0,100)
17175 StartFrequency = 100
17177 StopFrequency = float(StopFreqEntry.get())
17179 StopFreqEntry.delete(0,
"end")
17180 StopFreqEntry.insert(0,10000)
17181 StopFrequency = 10000
17183 Phasecenter = int(PhCenFreqEntry.get())
17184 RelPhaseCenter.set(Phasecenter)
17186 PhCenFreqEntry.delete(0,
"end")
17187 PhCenFreqEntry.insert(0,0)
17188 RelPhaseCenter.set(0)
17194 if SAVScale.get() == 0:
17195 while (i <= Vdiv.get()):
17196 y = Y0TF + i * GRHF/Vdiv.get()
17197 Dline = [x1,y,x2,y]
17198 if i == 0
or i == Vdiv.get():
17199 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17201 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17202 Vaxis_value = (DBlevel.get() - (i * DBdivlist[DBdivindex.get()]))
17203 Vaxis_label = str(Vaxis_value)
17204 Freqca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17205 if ShowC1_P.get() == 1
or ShowC2_P.get() == 1:
17206 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get())))
17207 Vaxis_value = Vaxis_value + Phasecenter
17208 Vaxis_label = str(Vaxis_value)
17209 Freqca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
17212 if SAVScale.get() == 2:
17214 LogVStop = math.log10(SAvertmax)
17218 LogVStart = math.log10(SAvertmin)
17221 LogVpixel = (LogVStart - LogVStop) / GRHF
17222 NumDec = LogVStart - LogVStop
17223 Gridpixel = GRHF/NumDec
17227 LogV = math.log10(10**V)
17228 y = Y0TF + (LogV/LogVpixel)
17231 Dline = [x1,y,x2,y]
17232 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17233 LNum = LogVStop + V
17235 axis_label =
"10.0"
17239 axis_label =
"100mV"
17241 axis_label =
"10mV"
17245 axis_label =
"100uV"
17247 axis_label =
"10uV"
17251 axis_label =
"100nV"
17253 axis_label =
"10nV"
17255 axis_label = str(LogVStart+V)
17257 Freqca.create_text(x1-3, y, text=axis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17260 ym = y + (Gridpixel*math.log10(J))
17261 Dline = [x1,ym,x2,ym]
17262 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17267 Vper = (SAvertmax - SAvertmin) / Vdiv.get()
17268 while (i < Vdiv.get()+1):
17269 y = Y0TF + i * GRHF/Vdiv.get()
17270 Dline = [x1,y,x2,y]
17271 if i == 0
or i == Vdiv.get():
17272 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17274 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17275 axis_value = (SAvertmax - (i * Vper))
17276 axis_label =
' {0:.3f} '.format(axis_value)
17277 Freqca.create_text(x1-3, y, text=axis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
17283 if HScale.get() == 1:
17285 LogFStop = math.log10(StopFrequency)
17287 LogFStart = math.log10(StartFrequency)
17290 LogFpixel = (LogFStop - LogFStart) / GRWF
17292 while F <= StopFrequency:
17293 if F >= StartFrequency:
17295 LogF = math.log10(F)
17296 x = X0LF + (LogF - LogFStart)/LogFpixel
17299 Dline = [x,y1,x,y2]
17300 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
17301 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17302 axis_label = str(F)
17303 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
17305 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17322 Freqdiv = (StopFrequency - StartFrequency) / 10
17324 x = X0LF + i * GRWF/10.0
17325 Dline = [x,y1,x,y2]
17326 if i == 0
or i == 10:
17327 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
17329 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
17330 axis_value = (StartFrequency + (i * Freqdiv))
17331 axis_label = str(axis_value)
17332 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
17335 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
17336 Yc = float(Y0TF) + Yconv * (DBlevel.get())
17338 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
17339 YVc = float(Y0TF) + YVconv * SAvertmax
17340 Fpixel = (StopFrequency - StartFrequency) / GRWF
17341 if ShowFCur.get() > 0:
17342 Dline = [FCursor, Y0TF, FCursor, Y0TF+GRHF]
17343 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
17345 if HScale.get() == 1:
17346 LogFStop = math.log10(StopFrequency)
17348 LogFStart = math.log10(StartFrequency)
17351 LogFpixel = (LogFStop - LogFStart) / GRWF
17352 xfreq = 10**(((FCursor-X0LF)*LogFpixel) + LogFStart)
17354 Fpixel = (StopFrequency - StartFrequency) / GRWF
17355 xfreq = ((FCursor-X0LF)*Fpixel)+StartFrequency
17356 XFString =
' {0:.2f} '.format(xfreq)
17357 V_label = XFString +
" Hz"
17358 Freqca.create_text(FCursor+1, Y0TF+GRHF+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
17361 if ShowdBCur.get() > 0:
17362 Dline = [X0LF, dBCursor, X0LF+GRWF, dBCursor]
17363 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
17364 if SAVScale.get() == 0:
17365 yvdB = ((Yc-dBCursor)/Yconv)
17366 VdBString =
' {0:.1f} '.format(yvdB)
17367 V_label = VdBString +
" dBV"
17368 elif SAVScale.get() == 1:
17369 yvdB = ((YVc-dBCursor)/YVconv)
17370 VdBString =
' {0:.3f} '.format(yvdB)
17371 V_label = VdBString +
" Vrms"
17373 LogVpixel = (LogVStop - LogVStart) / GRHF
17374 Vlog = ((YVc - dBCursor) * LogVpixel) + LogVStart
17376 VdBString =
' {:.2e} '.format(yvdB)
17377 V_label = VdBString +
" Vrms"
17379 Freqca.create_text(X0LF+GRWF-5, dBCursor, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
17381 SmoothBool = SmoothCurvesSA.get()
17383 if len(T1Fline) > 4:
17385 if OverRangeFlagA == 1:
17386 Freqca.create_line(T1Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17388 Freqca.create_line(T1Fline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17389 if ShowMarker.get() > 0:
17391 while k <= HarmonicMarkers.get():
17392 FreqA = k*PeakIndexA*Fsample
17394 if SAVScale.get() == 0:
17395 if SAVPSD.get() == 1:
17397 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k])/math.sqrt(FBinWidth))
17402 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k]))
17405 if ShowMarker.get() == 2
and k > 1:
17406 Peak_label =
' {0:.2f} '.format(dbA - PeakdbA) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17408 Peak_label =
' {0:.2f} '.format(dbA) +
',' +
' {0:.1f} '.format(FreqA)
17409 yA = Yc - Yconv * dbA
17412 dbA = 10 * math.log10(float(FFTresultA[PeakIndexA*k]))
17415 V = 10.0**(dbA/20.0)
17416 PeakV = 10.0**(PeakdbA/20.0)
17417 if SAVPSD.get() == 1:
17418 V = V/math.sqrt(FBinWidth)
17419 PeakV = PeakV/math.sqrt(FBinWidth)
17420 if SAVScale.get() == 2:
17421 LogVpixel = (LogVStop - LogVStart) / GRHF
17423 LogV = math.log10(V)
17424 yA = YVc - (LogV - LogVStart)/LogVpixel
17426 yA = YVc - YVconv * V
17427 if ShowMarker.get() == 2
and k > 1:
17428 Peak_label =
' {0:.2e} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17430 Peak_label =
' {0:.2e} '.format(V) +
',' +
' {0:.1f} '.format(FreqA)
17432 if ShowMarker.get() == 2
and k > 1:
17433 Peak_label =
' {0:.2f} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
17435 Peak_label =
' {0:.2f} '.format(V) +
',' +
' {0:.1f} '.format(FreqA)
17436 yA = YVc - YVconv * V
17438 if HScale.get() == 1:
17440 LogF = math.log10(FreqA)
17441 xA = X0LF + int((LogF - LogFStart)/LogFpixel)
17445 xA = X0LF+int((FreqA - StartFrequency)/Fpixel)
17447 Freqca.create_text(xA, yA, text=Peak_label, fill=COLORtrace1, anchor=
"s", font=(
"arial", FontSize ))
17450 if len(T2Fline) > 4:
17452 if OverRangeFlagB == 1:
17453 Freqca.create_line(T2Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17455 Freqca.create_line(T2Fline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17456 if ShowMarker.get() > 0:
17458 while k <= HarmonicMarkers.get():
17459 FreqB = k*PeakIndexB*Fsample
17461 if SAVScale.get() == 0:
17462 if SAVPSD.get() == 1:
17464 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k])/math.sqrt(FBinWidth))
17469 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k]))
17472 if ShowMarker.get() == 2
and k > 1:
17473 Peak_label =
' {0:.2f} '.format(dbB - PeakdbB) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17475 Peak_label =
' {0:.2f} '.format(dbB) +
',' +
' {0:.1f} '.format(FreqB)
17476 yB = Yc - Yconv * dbB
17479 dbB = 10 * math.log10(float(FFTresultB[PeakIndexB*k]))
17482 V = 10.0**(dbB/20.0)
17483 PeakV = 10.0**(PeakdbB/20.0)
17484 if SAVPSD.get() == 1:
17485 V = V/math.sqrt(FBinWidth)
17486 PeakV = PeakV/math.sqrt(FBinWidth)
17487 if SAVScale.get() == 2:
17488 LogVpixel = (LogVStop - LogVStart) / GRHF
17490 LogV = math.log10(V)
17491 yB = YVc - (LogV - LogVStart)/LogVpixel
17493 yB = YVc - YVconv * V
17494 if ShowMarker.get() == 2
and k > 1:
17495 Peak_label =
' {0:.2e} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17497 Peak_label =
' {0:.2e} '.format(V) +
',' +
' {0:.1f} '.format(FreqB)
17499 if ShowMarker.get() == 2
and k > 1:
17500 Peak_label =
' {0:.2f} '.format(V - PeakV) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
17502 Peak_label =
' {0:.2f} '.format(V) +
',' +
' {0:.1f} '.format(FreqB)
17503 yB = YVc - YVconv * V
17505 if HScale.get() == 1:
17507 LogF = math.log10(FreqB)
17508 xB = X0LF + int((LogF - LogFStart)/LogFpixel)
17512 xB = X0LF+int((FreqB - StartFrequency)/Fpixel)
17514 Freqca.create_text(xB, yB, text=Peak_label, fill=COLORtrace2, anchor=
"s", font=(
"arial", FontSize ))
17517 if len(T1Pline) > 4:
17519 Freqca.create_line(T1Pline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17520 if len(T2Pline) > 4:
17522 Freqca.create_line(T2Pline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17523 if ShowAWGASA.get() > 0
and len(TAFline) > 4:
17524 Freqca.create_line(TAFline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17525 if ShowAWGBSA.get() > 0
and len(TBFline) > 4:
17526 Freqca.create_line(TBFline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17527 if ShowRA_VdB.get() == 1
and len(T1FRline) > 4:
17528 Freqca.create_line(T1FRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17529 if ShowMarker.get() == 1:
17530 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
17531 Freqca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"s", font=(
"arial", FontSize ))
17532 if ShowRB_VdB.get() == 1
and len(T2FRline) > 4:
17533 Freqca.create_line(T2FRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17534 if ShowMarker.get() == 1:
17535 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
17536 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"s", font=(
"arial", FontSize ))
17537 if ShowRA_P.get() == 1
and len(T1PRline) > 4:
17538 Freqca.create_line(T1PRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17539 if ShowRB_P.get() == 1
and len(T2PRline) > 4:
17540 Freqca.create_line(T2PRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17541 if ShowMathSA.get() > 0
and len(TFMline) > 4:
17542 Freqca.create_line(TFMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17543 if ShowMarker.get() ==1:
17544 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
17545 Freqca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"s", font=(
"arial", FontSize ))
17546 if ShowRMath.get() == 1
and len(TFRMline) > 4:
17547 Freqca.create_line(TFRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
17548 if ShowMarker.get() ==1:
17549 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
17550 Freqca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"s", font=(
"arial", FontSize ))
17553 txt =
" Sample rate: " + str(SAMPLErate)
17554 txt = txt +
" FFT samples: " + str(SMPfft)
17556 txt = txt +
" " + FFTwindowname
17560 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17563 txt = str(StartFrequency) +
" to " + str(StopFrequency) +
" Hz"
17564 txt = txt +
" " + str(DBdivlist[DBdivindex.get()]) +
" dB/div"
17565 txt = txt +
" Level: " + str(DBlevel.get()) +
" dB "
17566 if FFTwindow.get() < 7:
17567 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
17569 txt = txt +
" FFT Bandwidth = ???"
17573 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17575 if FreqTraceMode.get() == 1:
17576 txt =
"Normal mode "
17578 if FreqTraceMode.get() == 2:
17579 txt =
"Peak hold mode "
17581 if FreqTraceMode.get() == 3:
17582 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
17584 if ZEROstuffing.get() > 0:
17585 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
17587 if (RUNstatus.get() == 0)
and (SingleShotSA.get() == 0):
17588 txt = txt +
" Stopped "
17589 elif SingleShotSA.get() == 1:
17590 txt = txt +
" Single Shot Trace "
17592 if FreqDisp.get() == 1:
17593 txt = txt +
" Running "
17595 txt = txt +
" Display off "
17598 IDtxt = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
17601 global SMPfft, FFTwindow
17602 global SMPfftpwrTwo, BodeDisp
17603 global TRACEresetFreq, FreqTraceMode, LoopNum, FSweepMode, FSweepCont
17606 if BodeDisp.get() == 0:
17607 if FFTwindow.get() != 8:
17608 SMPfft = 2 ** int(SMPfftpwrTwo.get())
17611 if FreqTraceMode.get() == 1
and TRACEresetFreq ==
False:
17612 TRACEresetFreq =
True
17613 if FreqTraceMode.get() == 2
and LoopNum.get() == 1
and FSweepMode.get() > 0
and FSweepCont.get() == 0
and BodeDisp.get() >0:
17614 TRACEresetFreq =
True
17617 global FFTbandwidth
17619 global FFTwindowname
17620 global FFTwindowshape
17621 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
17623 global LastWindow, LastSMPfft
17625 if LastWindow == FFTwindow.get()
and LastSMPfft == SMPfft:
17629 FFTwindowname =
"No such window"
17632 if FFTwindow.get() == 0:
17633 FFTwindowname =
" Rectangular (no) window (B=1) "
17636 if FFTwindow.get() == 1:
17637 FFTwindowname =
" Cosine window (B=1.24) "
17640 if FFTwindow.get() == 2:
17641 FFTwindowname =
" Triangular window (B=1.33) "
17644 if FFTwindow.get() == 3:
17645 FFTwindowname =
" Hann window (B=1.5) "
17648 if FFTwindow.get() == 4:
17649 FFTwindowname =
" Blackman window (B=1.73) "
17652 if FFTwindow.get() == 5:
17653 FFTwindowname =
" Nuttall window (B=2.02) "
17656 if FFTwindow.get() == 6:
17657 FFTwindowname =
" Flat top window (B=3.77) "
17660 if FFTwindow.get() == 7:
17661 FFTwindowname = FFTUserWindowString
17664 FFTwindowshape = eval(FFTUserWindowString)
17666 FFTwindowshape = numpy.ones(SMPfft)
17667 print(
"Filling FFT window with Ones")
17668 elif FFTwindow.get() == 8:
17669 FFTwindowname =
"Window Shape From file"
17672 FFTbandwidth = int(FFTbw * (SAMPLErate/2.0) / float(SMPfft))
17674 FFTwindowshape = numpy.ones(SMPfft)
17678 if FFTwindow.get() == 1:
17679 w = math.sin(math.pi * n / (SMPfft - 1))
17680 FFTwindowshape[n] = w * 1.571
17682 if FFTwindow.get() == 2:
17683 w = (2.0 / SMPfft) * ((SMPfft/ 2.0) - abs(n - (SMPfft - 1) / 2.0))
17684 FFTwindowshape[n] = w * 2.0
17686 if FFTwindow.get() == 3:
17687 w = 0.5 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1))
17688 FFTwindowshape[n] = w * 2.000
17690 if FFTwindow.get() == 4:
17691 w = 0.42 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.08 * math.cos(4 * math.pi * n / (SMPfft - 1))
17692 FFTwindowshape[n] = w * 2.381
17694 if FFTwindow.get() == 5:
17695 w = 0.355768 - 0.487396 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.144232 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.012604 * math.cos(6 * math.pi * n / (SMPfft - 1))
17696 FFTwindowshape[n] = w * 2.811
17698 if FFTwindow.get() == 6:
17699 w = 1.0 - 1.93 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 1.29 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.388 * math.cos(6 * math.pi * n / (SMPfft - 1)) + 0.032 * math.cos(8 * math.pi * n / (SMPfft - 1))
17700 FFTwindowshape[n] = w * 1.000
17702 LastWindow = FFTwindow.get()
17703 LastSMPfft = SMPfft
17706 global FFTUserWindowString, freqwindow
17708 TempString = FFTUserWindowString
17709 FFTUserWindowString = askstring(
"User FFT Window",
"Current User Window: " + FFTUserWindowString +
"\n\nNew Window:\n", initialvalue=FFTUserWindowString, parent=freqwindow)
17710 if (FFTUserWindowString ==
None):
17711 FFTUserWindowString = TempString
17714 global FFTwindowshape, SMPfft, LastSMPfft, FFTwindow, LastWindow
17717 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=freqwindow)
17719 CSVFile = open(filename)
17720 csv_f = csv.reader(CSVFile)
17721 FFTwindowshape = []
17724 FFTwindowshape.append(float(row[0]))
17726 print(
'skipping non-numeric row')
17727 FFTwindowshape = numpy.array(FFTwindowshape)
17729 SMPfft = len(FFTwindowshape)
17730 LastSMPfft = SMPfft
17731 LastWindow = FFTwindow.get()
17734 showwarning(
"WARNING",
"No such file found or wrong format!")
17737 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
17741 if RUNstatus.get() == 0:
17743 Freqca.bind(
'<MouseWheel>', onCanvasFreqClickScroll)
17744 Freqca.bind(
"<Button-4>", onCanvasFreqClickScroll)
17745 Freqca.bind(
"<Button-5>", onCanvasFreqClickScroll)
17748 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
17750 if event.widget == Freqca:
17751 ShiftKeyDwn = event.state & 1
17752 if ShowFCur.get() > 0
and ShiftKeyDwn == 0:
17754 if event.num == 5
or event.delta == -120:
17756 if event.num == 4
or event.delta == 120:
17758 elif ShowdBCur.get() > 0
or ShiftKeyDwn == 1:
17760 if event.num == 5
or event.delta == -120:
17762 if event.num == 4
or event.delta == 120:
17764 if RUNstatus.get() == 0:
17773 global Freqca, MarkerLoc, SAMPLErate, BaseSampleRate
17774 global COLORgrid, COLORtext, HScale, ShowC1_VdB, ShowC2_VdB
17775 global COLORtrace1, COLORtrace2, StartFreqEntry, StopFreqEntry
17776 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF
17777 global SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry, SAvertmax, SAvertmin
17779 if (RUNstatus.get() == 0):
17780 MarkerFreqNum = MarkerFreqNum + 1
17781 COLORmarker = COLORgrid
17782 if ShowC1_VdB.get() == 1:
17783 COLORmarker = COLORtrace1
17784 elif ShowC2_VdB.get() == 1:
17785 COLORmarker = COLORtrace2
17787 StartFrequency = float(StartFreqEntry.get())
17789 StartFreqEntry.delete(0,
"end")
17790 StartFreqEntry.insert(0,100)
17791 StartFrequency = 100
17793 StopFrequency = float(StopFreqEntry.get())
17795 StopFreqEntry.delete(0,
"end")
17796 StopFreqEntry.insert(0,100)
17797 StopFrequency = 100
17799 Freqca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
17800 Freqca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
17801 Freqca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
17803 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
17804 YVconv = float(GRHF) / (SAvertmax - SAvertmin)
17805 Yc = float(Y0TF) + Yconv * (DBlevel.get())
17806 YVc = float(Y0TF) + YVconv * SAvertmax
17807 Yphconv = float(GRHF) / 360
17808 Yp = float(Y0TF) + Yphconv + 180
17810 if HScale.get() == 1:
17811 LogFStop = math.log10(StopFrequency)
17813 LogFStart = math.log10(StartFrequency)
17816 LogFpixel = (LogFStop - LogFStart) / GRWF
17817 xfreq = 10**(((event.x-X0LF)*LogFpixel) + LogFStart)
17819 Fpixel = (StopFrequency - StartFrequency) / GRWF
17820 xfreq = ((event.x-X0LF)*Fpixel)+StartFrequency
17823 LogVStop = math.log10(SAvertmax)
17827 LogVStart = math.log10(SAvertmin)
17830 LogVpixel = (LogVStop - LogVStart) / GRHF
17832 XFString =
' {0:.2f} '.format(xfreq)
17833 if SAVScale.get() == 0:
17834 yvdB = ((Yc-event.y)/Yconv)
17835 VdBString =
' {0:.3f} '.format(yvdB)
17836 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
17838 if SAVScale.get() == 1:
17839 yvdB = ((YVc-event.y)/YVconv)
17840 VdBString =
' {0:.3f} '.format(yvdB)
17842 Vlog = ((YVc - event.y) * LogVpixel) + LogVStart
17844 VdBString =
' {:.2e} '.format(yvdB)
17845 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" Vrms"
17847 if MarkerFreqNum > 1:
17848 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17849 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
17850 if SAVScale.get() == 0:
17851 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17852 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
17854 if SAVScale.get() == 1:
17855 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
17857 DeltaV =
' {0:.2e} '.format(yvdB-PrevdBV)
17858 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" Vrms"
17860 y = Y0TF + 3 + (MarkerFreqNum*10)
17862 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
17863 x = X0LF + GRWF - 5
17864 y = Y0TF + 3 + (MarkerFreqNum*10)
17866 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
17868 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
17870 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
17871 x = X0LF + GRWF - 5
17872 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
17874 Freqca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
17880 if ShowC1_VdB.get() == 0:
17887 if ShowC2_VdB.get() == 0:
17894 if ShowC1_P.get() == 0:
17901 if ShowC2_P.get() == 0:
17908 if ShowMarker.get() == 0:
17915 if ShowRA_VdB.get() == 0:
17922 if ShowRB_VdB.get() == 0:
17956 if ShowFCur.get() == 0:
17963 if ShowdBCur.get() == 1:
17970 if ShowdBCur.get() == 2:
17976 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus, Bodeca
17979 BdBCursor = event.y
17980 if RUNstatus.get() == 0:
17983 Bodeca.bind(
'<MouseWheel>', onCanvasBodeClickScroll)
17984 Bodeca.bind(
"<Button-4>", onCanvasBodeClickScroll)
17985 Bodeca.bind(
"<Button-5>", onCanvasBodeClickScroll)
17988 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus
17991 shift_key = event.state & 1
17992 if ShowBPCur.get() > 0
and shift_key == 0:
17994 if event.num == 5
or event.delta == -120:
17996 if event.num == 4
or event.delta == 120:
17998 elif ShowBdBCur.get() > 0
or shift_key == 1:
18000 if event.num == 5
or event.delta == -120:
18002 if event.num == 4
or event.delta == 120:
18004 if RUNstatus.get() == 0:
18013 global Bodeca, MarkerLoc, SAMPLErate
18014 global COLORgrid, COLORtext, HScaleBP, ShowCA_VdB, ShowCB_VdB, DBdivindexBP
18015 global COLORtrace1, COLORtrace2, COLORtrace6, StartBodeEntry, StopBodeEntry, DBlevelBP
18016 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF, Vdiv
18018 if (RUNstatus.get() == 0):
18019 MarkerFreqNum = MarkerFreqNum + 1
18020 COLORmarker = COLORtrace6
18021 if ShowCA_VdB.get() == 1:
18022 COLORmarker = COLORtrace1
18023 elif ShowCB_VdB.get() == 1:
18024 COLORmarker = COLORtrace2
18026 EndFreq = float(StopBodeEntry.get())
18028 StopBodeEntry.delete(0,
"end")
18029 StopBodeEntry.insert(0,10000)
18032 BeginFreq = float(StartBodeEntry.get())
18034 StartBodeEntry.delete(0,
"end")
18035 StartBodeEntry.insert(0,100)
18038 Bodeca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
18039 Bodeca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
18040 Bodeca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
18042 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
18043 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
18044 Yphconv = float(GRHBP) / 360
18045 Yp = float(Y0TBP) + Yphconv + 180
18049 if HScaleBP.get() == 1:
18050 LogFStop = math.log10(EndFreq)
18052 LogFStart = math.log10(BeginFreq)
18055 LogFpixel = (LogFStop - LogFStart) / GRWBP
18056 xfreq = 10**(((event.x-x1)*LogFpixel) + LogFStart)
18058 Fpixel = (EndFreq - BeginFreq) / GRWBP
18059 xfreq = ((event.x-x1)*Fpixel)+BeginFreq
18061 yvdB = ((Yc-event.y)/Yconv)
18062 VdBString =
' {0:.1f} '.format(yvdB)
18063 XFString =
' {0:.2f} '.format(xfreq)
18064 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
18065 if MarkerFreqNum > 1:
18066 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
18067 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
18068 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
18070 y = Y0TBP + 3 + (MarkerFreqNum*10)
18072 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
18074 y = Y0TBP + 3 + (MarkerFreqNum*10)
18076 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
18078 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
18080 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
18082 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
18084 Bodeca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
18090 if ShowCA_VdB.get() == 0:
18097 if ShowCB_VdB.get() == 0:
18104 if ShowCA_P.get() == 0:
18111 if ShowCB_P.get() == 0:
18117 global ShowMarkerBP
18118 if ShowMarkerBP.get() == 0:
18119 ShowMarkerBP.set(1)
18121 ShowMarkerBP.set(0)
18125 if ShowRA_VdB.get() == 0:
18132 if ShowRB_VdB.get() == 0:
18154 if ShowBPCur.get() == 0:
18161 if ShowBdBCur.get() == 1:
18168 if ShowBdBCur.get() == 2:
18190 button = event.widget
18191 cursor_position = button.index(INSERT)
18192 Pos = cursor_position
18193 OldVal = button.get()
18194 OldValfl = float(OldVal)
18197 Dot = OldVal.find (
".")
18198 Decimals = Len - Dot - 1
18201 Step = 10**(Len - Pos)
18203 Step = 10**(Dot - Pos)
18205 Step = 10**(Dot - Pos + 1)
18207 if event.num == 5
or event.delta == -120:
18208 NewVal = OldValfl - Step
18209 if event.num == 4
or event.delta == 120:
18210 NewVal = OldValfl + Step
18211 FormatStr =
"{0:." + str(Decimals) +
"f}"
18212 NewStr = FormatStr.format(NewVal)
18213 NewDot = NewStr.find (
".")
18214 NewPos = Pos + NewDot - Dot
18216 NewLen = len(NewStr)
18217 NewPos = Pos + NewLen - Len
18218 button.delete(0, END)
18219 button.insert(0, NewStr)
18220 button.icursor(NewPos)
18240 button = event.widget
18241 cursor_position = button.index(INSERT)
18242 Pos = cursor_position
18243 OldVal = button.get()
18244 OldValfl = float(OldVal)
18246 Dot = OldVal.find (
".")
18247 Decimals = Len - Dot - 1
18250 Step = 10**(Len - Pos)
18252 Step = 10**(Dot - Pos)
18254 Step = 10**(Dot - Pos + 1)
18255 if platform.system() ==
"Windows":
18256 if event.keycode == 38:
18257 NewVal = OldValfl + Step
18258 elif event.keycode == 40:
18259 NewVal = OldValfl - Step
18262 elif platform.system() ==
"Linux":
18263 if event.keycode == 111:
18264 NewVal = OldValfl + Step
18265 elif event.keycode == 116:
18266 NewVal = OldValfl - Step
18269 elif platform.system() ==
"Darwin":
18270 if event.keycode == 0x7D:
18271 NewVal = OldValfl + Step
18272 elif event.keycode == 0x7E:
18273 NewVal = OldValfl - Step
18279 FormatStr =
"{0:." + str(Decimals) +
"f}"
18280 NewStr = FormatStr.format(NewVal)
18281 NewDot = NewStr.find (
".")
18282 NewPos = Pos + NewDot - Dot
18284 NewLen = len(NewStr)
18285 NewPos = Pos + NewLen - Len
18286 button.delete(0, END)
18287 button.insert(0, NewStr)
18288 button.icursor(NewPos)
18292 spbox = event.widget
18293 if sys.version_info[0] == 3
and sys.version_info[1] > 6:
18295 if event.num == 4
or event.delta > 0:
18296 spbox.invoke(
'buttonup')
18297 if event.num == 5
or event.delta < 0:
18298 spbox.invoke(
'buttondown')
18302 global AWGAMode, AWGATerm, AWGAShape, AWGSync, awgwindow, AWGAPhaseDelay, AWGBPhaseDelay
18303 global AWGBMode, AWGBTerm, AWGBShape, AWGScreenStatus, AWGARepeatFlag, AWGBRepeatFlag
18304 global AWGABurstFlag, AWGBBurstFlag, AWGAShapeLabel, AWGBShapeLabel, AWGShowAdvanced
18305 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGAPhaseEntry, AWGADutyCycleEntry
18306 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBPhaseEntry, AWGBDutyCycleEntry
18307 global AWGALength, AWGBLength, RevDate, phasealab, phaseblab, AWGAModeLabel, AWGBModeLabel
18308 global AWGAIOMode, AWGBIOMode, duty1lab, duty2lab, awgaph, awgadel, awgbph, awgbdel
18309 global AwgLayout, AWG_Amp_Mode, awgsync, SWRev
18310 global amp1lab, amp2lab, off1lab, off2lab, Reset_Freq, AWG_2X, BisCompA, FWRevOne
18311 global ModeAMenu, ShapeAMenu, amp1lab, off1lab, freq1lab, awgaph, awgadel, ModeBMenu, ShapeBMenu
18312 global amp2lab, off2lab, freq2lab, awgbph, awgbdel, bcompa, awgsync
18313 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise, NoiseList
18315 if AWGScreenStatus.get() == 0:
18316 AWGScreenStatus.set(1)
18318 awgwindow = Toplevel()
18319 awgwindow.title(
"AWG Controls " + SWRev + RevDate)
18320 awgwindow.resizable(FALSE,FALSE)
18321 awgwindow.geometry(
'+0+100')
18322 awgwindow.protocol(
"WM_DELETE_WINDOW", DestroyAWGScreen)
18324 frame2 = LabelFrame(awgwindow, text=
"AWG CH A", style=
"A10R1.TLabelframe")
18325 frame3 = LabelFrame(awgwindow, text=
"AWG CH B", style=
"A10R2.TLabelframe")
18327 if AwgLayout ==
"Horz":
18328 frame2.pack(side=LEFT, expand=1, fill=X)
18329 frame3.pack(side=LEFT, expand=1, fill=X)
18331 frame2.pack(side=TOP, expand=1, fill=Y)
18332 frame3.pack(side=TOP, expand=1, fill=Y)
18335 awg1eb = Frame( frame2 )
18336 awg1eb.pack(side=TOP)
18337 ModeAMenu = Menubutton(awg1eb, text=
"Mode", style=
"W5.TButton")
18338 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
18339 ModeAMenu[
"menu"] = ModeAMenu.menu
18340 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
18341 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
18342 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
18343 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
18344 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
18345 ModeAMenu.menu.add_separator()
18346 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
18347 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
18348 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
18349 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
18350 ModeAMenu.pack(side=LEFT, anchor=W)
18351 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", style=
"W6.TButton")
18352 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
18353 ShapeAMenu[
"menu"] = ShapeAMenu.menu
18354 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
18355 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
18356 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
18357 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
18358 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
18359 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
18360 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
18361 if AWGShowAdvanced.get() > 0:
18362 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
18363 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
18364 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
18365 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
18366 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
18367 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
18368 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
18369 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
18370 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
18371 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
18372 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
18373 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
18374 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
18375 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
18377 ShapeAMenu.menu.add_separator()
18378 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
18379 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
18380 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
18381 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
18382 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
18383 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
18384 ShapeAMenu.pack(side=LEFT, anchor=W)
18386 AWGAModeLabel = Label(frame2, text=
"AWG A Mode")
18387 AWGAModeLabel.pack(side=TOP)
18388 AWGAShapeLabel = Label(frame2, text=
"AWG A Shape")
18389 AWGAShapeLabel.pack(side=TOP)
18391 awg1ampl = Frame( frame2 )
18392 awg1ampl.pack(side=TOP)
18393 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
18394 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
18395 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
18396 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
18397 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
18398 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
18399 AWGAAmplEntry.pack(side=LEFT, anchor=W)
18400 AWGAAmplEntry.delete(0,
"end")
18401 AWGAAmplEntry.insert(0,0.0)
18402 amp1lab = Label(awg1ampl)
18403 amp1lab.pack(side=LEFT, anchor=W)
18405 awg1off = Frame( frame2 )
18406 awg1off.pack(side=TOP)
18407 AWGAOffsetEntry = Entry(awg1off, width=5, cursor=
'double_arrow')
18408 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
18409 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
18410 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
18411 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
18412 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
18413 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
18414 AWGAOffsetEntry.delete(0,
"end")
18415 AWGAOffsetEntry.insert(0,0.0)
18416 off1lab = Label(awg1off)
18417 off1lab.pack(side=LEFT, anchor=W)
18418 if AWG_Amp_Mode.get() == 0:
18419 amp1lab.config(text =
"Min Ch A" )
18420 off1lab.config(text =
"Max Ch A" )
18422 amp1lab.config(text =
"Amp Ch A" )
18423 off1lab.config(text =
"Off Ch A" )
18425 awg1freq = Frame( frame2 )
18426 awg1freq.pack(side=TOP)
18427 AWGAFreqEntry = Entry(awg1freq, width=7, cursor=
'double_arrow')
18428 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
18429 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
18430 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
18431 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
18432 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
18433 AWGAFreqEntry.pack(side=LEFT, anchor=W)
18434 AWGAFreqEntry.delete(0,
"end")
18435 AWGAFreqEntry.insert(0,100.0)
18436 freq1lab = Label(awg1freq, text=
"Freq Ch A")
18437 freq1lab.pack(side=LEFT, anchor=W)
18440 awg1phase = Frame( frame2 )
18441 awg1phase.pack(side=TOP)
18442 awgaph = Button(awg1phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGAPhaseDelay)
18443 awgaph.pack(side=LEFT, anchor=W)
18444 AWGAPhaseEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
18445 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
18446 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
18447 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
18448 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
18449 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
18450 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
18451 AWGAPhaseEntry.delete(0,
"end")
18452 AWGAPhaseEntry.insert(0,0)
18453 phasealab = Label(awg1phase, text=
"Deg")
18454 phasealab.pack(side=LEFT, anchor=W)
18456 awg1dc = Frame( frame2 )
18457 awg1dc.pack(side=TOP)
18458 AWGADutyCycleEntry = Entry(awg1dc, width=5, cursor=
'double_arrow')
18459 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
18460 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
18461 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
18462 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
18463 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
18464 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
18465 AWGADutyCycleEntry.delete(0,
"end")
18466 AWGADutyCycleEntry.insert(0,50)
18467 duty1lab = Label(awg1dc, text=
"%")
18468 duty1lab.pack(side=LEFT, anchor=W)
18470 AWGALength = Label(frame2, text=
"Length")
18471 AWGALength.pack(side=TOP)
18473 anoise = Frame( frame2 )
18474 anoise.pack(side=TOP)
18475 AWGANoise = Label(anoise, text=
"Noise")
18476 AWGANoise.pack(side=LEFT, anchor=W)
18477 AWGAsbnoise = Spinbox(anoise, width=8, cursor=
'double_arrow', values=NoiseList, command=ReMakeAWGwaves)
18478 AWGAsbnoise.bind(
'<MouseWheel>', onSpinBoxScroll)
18479 AWGAsbnoise.bind(
"<Button-4>", onSpinBoxScroll)
18480 AWGAsbnoise.bind(
"<Button-5>", onSpinBoxScroll)
18481 AWGAsbnoise.pack(side=LEFT, anchor=W)
18482 AWGANoiseEntry = Entry(anoise, width=5, cursor=
'double_arrow')
18483 AWGANoiseEntry.bind(
"<Return>", UpdateAwgContRet)
18484 AWGANoiseEntry.bind(
'<MouseWheel>', onAWGAscroll)
18485 AWGANoiseEntry.bind(
"<Button-4>", onAWGAscroll)
18486 AWGANoiseEntry.bind(
"<Button-5>", onAWGAscroll)
18487 AWGANoiseEntry.bind(
'<Key>', onTextKeyAWG)
18488 AWGANoiseEntry.pack(side=LEFT, anchor=W)
18489 AWGANoiseEntry.delete(0,
"end")
18490 AWGANoiseEntry.insert(0,0.0)
18492 if FWRevOne > 2.16:
18493 awg2x1 = Radiobutton(frame2, text=
"Both CH 1X", variable=AWG_2X, value=0, command=BAWG2X)
18494 awg2x1.pack(side=TOP)
18495 awg2x2 = Radiobutton(frame2, text=
"CH A 2X", variable=AWG_2X, value=1, command=BAWG2X)
18496 awg2x2.pack(side=TOP)
18497 awg2x3 = Radiobutton(frame2, text=
"CH B 2X", variable=AWG_2X, value=2, command=BAWG2X)
18498 awg2x3.pack(side=TOP)
18500 awgsync = Checkbutton(frame2, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
18501 awgsync.pack(side=TOP)
18504 awg2eb = Frame( frame3 )
18505 awg2eb.pack(side=TOP)
18506 ModeBMenu = Menubutton(awg2eb, text=
"Mode", style=
"W5.TButton")
18507 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
18508 ModeBMenu[
"menu"] = ModeBMenu.menu
18509 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
18510 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
18511 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
18512 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
18513 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
18514 ModeBMenu.menu.add_separator()
18515 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
18516 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
18517 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
18518 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
18519 ModeBMenu.pack(side=LEFT, anchor=W)
18520 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", style=
"W6.TButton")
18521 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
18522 ShapeBMenu[
"menu"] = ShapeBMenu.menu
18523 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
18524 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
18525 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
18526 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
18527 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
18528 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
18529 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
18530 if AWGShowAdvanced.get() > 0:
18531 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
18532 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
18533 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
18534 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
18535 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
18536 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
18537 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
18538 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
18539 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
18540 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
18541 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
18542 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
18544 ShapeBMenu.menu.add_separator()
18545 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
18546 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
18547 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
18548 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
18549 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
18550 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
18551 ShapeBMenu.pack(side=LEFT, anchor=W)
18553 AWGBModeLabel = Label(frame3, text=
"AWG B Mode")
18554 AWGBModeLabel.pack(side=TOP)
18555 AWGBShapeLabel = Label(frame3, text=
"AWG B Shape")
18556 AWGBShapeLabel.pack(side=TOP)
18558 awg2ampl = Frame( frame3 )
18559 awg2ampl.pack(side=TOP)
18560 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
18561 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
18562 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
18563 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
18564 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
18565 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
18566 AWGBAmplEntry.pack(side=LEFT, anchor=W)
18567 AWGBAmplEntry.delete(0,
"end")
18568 AWGBAmplEntry.insert(0,0.0)
18569 amp2lab = Label(awg2ampl)
18570 amp2lab.pack(side=LEFT, anchor=W)
18572 awg2off = Frame( frame3 )
18573 awg2off.pack(side=TOP)
18574 AWGBOffsetEntry = Entry(awg2off, width=5, cursor=
'double_arrow')
18575 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
18576 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
18577 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
18578 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
18579 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
18580 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
18581 AWGBOffsetEntry.delete(0,
"end")
18582 AWGBOffsetEntry.insert(0,0.0)
18583 off2lab = Label(awg2off)
18584 off2lab.pack(side=LEFT, anchor=W)
18585 if AWG_Amp_Mode.get() == 0:
18586 amp2lab.config(text =
"Min Ch B" )
18587 off2lab.config(text =
"Max Ch B" )
18589 amp2lab.config(text =
"Amp Ch B" )
18590 off2lab.config(text =
"Off Ch B" )
18592 awg2freq = Frame( frame3 )
18593 awg2freq.pack(side=TOP)
18594 AWGBFreqEntry = Entry(awg2freq, width=7, cursor=
'double_arrow')
18595 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
18596 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
18597 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
18598 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
18599 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
18600 AWGBFreqEntry.pack(side=LEFT, anchor=W)
18601 AWGBFreqEntry.delete(0,
"end")
18602 AWGBFreqEntry.insert(0,100.0)
18603 freq2lab = Label(awg2freq, text=
"Freq Ch B")
18604 freq2lab.pack(side=LEFT, anchor=W)
18607 awg2phase = Frame( frame3 )
18608 awg2phase.pack(side=TOP)
18609 awgbph = Button(awg2phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGBPhaseDelay)
18610 awgbph.pack(side=LEFT, anchor=W)
18611 AWGBPhaseEntry = Entry(awg2phase, width=4, cursor=
'double_arrow')
18612 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
18613 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
18614 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
18615 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
18616 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
18617 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
18618 AWGBPhaseEntry.delete(0,
"end")
18619 AWGBPhaseEntry.insert(0,0)
18620 phaseblab = Label(awg2phase, text=
"Deg")
18621 phaseblab.pack(side=LEFT, anchor=W)
18623 awg2dc = Frame( frame3 )
18624 awg2dc.pack(side=TOP)
18625 AWGBDutyCycleEntry = Entry(awg2dc, width=5, cursor=
'double_arrow')
18626 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
18627 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
18628 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
18629 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
18630 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
18631 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
18632 AWGBDutyCycleEntry.delete(0,
"end")
18633 AWGBDutyCycleEntry.insert(0,50)
18634 duty2lab = Label(awg2dc, text=
"%")
18635 duty2lab.pack(side=LEFT, anchor=W)
18637 AWGBLength = Label(frame3, text=
"Length")
18638 AWGBLength.pack(side=TOP)
18640 bnoise = Frame( frame3 )
18641 bnoise.pack(side=TOP)
18642 AWGBNoise = Label(bnoise, text=
"Noise")
18643 AWGBNoise.pack(side=LEFT, anchor=W)
18644 AWGBsbnoise = Spinbox(bnoise, width=8, cursor=
'double_arrow', values=NoiseList, command=ReMakeAWGwaves)
18645 AWGBsbnoise.bind(
'<MouseWheel>', onSpinBoxScroll)
18646 AWGBsbnoise.bind(
"<Button-4>", onSpinBoxScroll)
18647 AWGBsbnoise.bind(
"<Button-5>", onSpinBoxScroll)
18648 AWGBsbnoise.pack(side=LEFT, anchor=W)
18649 AWGBNoiseEntry = Entry(bnoise, width=5, cursor=
'double_arrow')
18650 AWGBNoiseEntry.bind(
"<Return>", UpdateAwgContRet)
18651 AWGBNoiseEntry.bind(
'<MouseWheel>', onAWGBscroll)
18652 AWGBNoiseEntry.bind(
"<Button-4>", onAWGBscroll)
18653 AWGBNoiseEntry.bind(
"<Button-5>", onAWGBscroll)
18654 AWGBNoiseEntry.bind(
'<Key>', onTextKeyAWG)
18655 AWGBNoiseEntry.pack(side=LEFT, anchor=W)
18656 AWGBNoiseEntry.delete(0,
"end")
18657 AWGBNoiseEntry.insert(0,0.0)
18659 bcompa = Checkbutton(frame3, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
18660 bcompa.pack(side=TOP)
18661 if FWRevOne > 2.16:
18662 awgsync = Checkbutton(frame3, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
18663 awgsync.pack(side=TOP)
18665 dismissbutton = Button(frame3, text=
"Minimize", style=
"W8.TButton", command=DestroyAWGScreen)
18666 dismissbutton.pack(side=TOP)
18667 if ShowBallonHelp > 0:
18668 BuildAWGAPhase_tip =
CreateToolTip(awgaph,
'Toggle between degrees and time')
18669 BuildAWGBPhase_tip =
CreateToolTip(awgbph,
'Toggle between degrees and time')
18670 BuildAWGSync_tip =
CreateToolTip(awgsync,
'Toggle between continuous and discontinuous modes')
18671 BuildBComp_tip =
CreateToolTip(bcompa,
'Lock CH B to be the inverse of CH A')
18672 BuildModeAMenu_tip =
CreateToolTip(ModeAMenu,
'Configure channel output mode')
18673 BuildModeBMenu_tip =
CreateToolTip(ModeBMenu,
'Configure channel output mode')
18674 BuildShapeAMenu_tip =
CreateToolTip(ShapeAMenu,
'Set channel waveform shape')
18675 BuildShapeBMenu_tip =
CreateToolTip(ShapeBMenu,
'Set channel waveform shape')
18677 awgwindow.deiconify()
18680 global AWG_2X, devx, AWGAIOMode, AWGBIOMode, BisCompA
18683 if AWG_2X.get() == 0:
18684 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
18685 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
18686 elif AWG_2X.get() == 1:
18687 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
18688 devx.ctrl_transfer(0x40, 0x25, 0x0, 0, 0, 0, 100)
18689 if AWGBIOMode.get() == 0:
18690 devx.ctrl_transfer(0x40, 0x51, 40, 0, 0, 0, 100)
18691 devx.ctrl_transfer(0x40, 0x51, 52, 0, 0, 0, 100)
18693 elif AWG_2X.get() == 2:
18694 devx.ctrl_transfer(0x40, 0x24, 0x1, 0, 0, 0, 100)
18695 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
18696 if AWGAIOMode.get() == 0:
18697 devx.ctrl_transfer(0x40, 0x51, 35, 0, 0, 0, 100)
18698 devx.ctrl_transfer(0x40, 0x51, 51, 0, 0, 0, 100)
18702 global awgwindow, AWGScreenStatus
18705 awgwindow.iconify()
18709 global MuxScreenStatus, muxwindow, RevDate, DacScreenStatus, DigScreenStatus
18710 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
18711 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, SyncButton
18712 global CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab, CHBlab, CHBofflab
18713 global CHB_cba, CHB_cbb, CHB_cbc, CHB_cbd
18714 global CHB_Cofflab, CHB_Dofflab, awgsync, SWRev, BorderSize
18715 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb, MuxSync, hipulseimg, lowpulseimg
18716 global ShowRMA, ShowRMB, ShowRMC, ShowRMD
18717 global ChopMuxMode, ChopTrig, DualMuxMode, ShowBallonHelp
18719 if MuxScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0:
18720 MuxScreenStatus.set(1)
18724 muxwindow = Toplevel()
18725 muxwindow.title(
"External Mux " + SWRev + RevDate)
18726 muxwindow.resizable(FALSE,FALSE)
18727 muxwindow.protocol(
"WM_DELETE_WINDOW", DestroyMuxScreen)
18729 frameM = LabelFrame(muxwindow, text=
"External Analog Mux", style=
"A10.TLabelframe")
18730 frameM.pack(side=LEFT, expand=1, fill=X)
18733 frameA = Frame(frameM)
18734 frameA.pack(side=TOP)
18735 CHB_cba = Checkbutton(frameA, text=
'CB-A', style=
"Strace2.TCheckbutton", variable=Show_CBA, command=UpdateTimeTrace)
18736 CHB_cba.pack(side=LEFT, anchor=W)
18737 CHB_Asb = Spinbox(frameA, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18738 CHB_Asb.bind(
'<MouseWheel>', onSpinBoxScroll)
18739 CHB_Asb.bind(
"<Button-4>", onSpinBoxScroll)
18740 CHB_Asb.bind(
"<Button-5>", onSpinBoxScroll)
18741 CHB_Asb.pack(side=LEFT)
18742 CHB_Asb.delete(0,
"end")
18743 CHB_Asb.insert(0,0.5)
18745 CHB_Alab = Button(frameA, text=
"CB-A V/Div", style=
"Rtrace2.TButton", command=SetScaleMuxA)
18746 CHB_Alab.pack(side=LEFT)
18747 CHB_APosEntry = Entry(frameA, width=5, cursor=
'double_arrow')
18748 CHB_APosEntry.bind(
'<Return>', onTextKey)
18749 CHB_APosEntry.bind(
'<MouseWheel>', onTextScroll)
18750 CHB_APosEntry.bind(
"<Button-4>", onTextScroll)
18751 CHB_APosEntry.bind(
"<Button-5>", onTextScroll)
18752 CHB_APosEntry.bind(
'<Key>', onTextKey)
18753 CHB_APosEntry.pack(side=LEFT)
18754 CHB_APosEntry.delete(0,
"end")
18755 CHB_APosEntry.insert(0,2.5)
18756 CHB_Aofflab = Button(frameA, text=
"CB-A Pos", style=
"Rtrace2.TButton", command=SetMuxAPoss)
18757 CHB_Aofflab.pack(side=LEFT)
18759 frameB = Frame(frameM)
18760 frameB.pack(side=TOP)
18761 CHB_cbb = Checkbutton(frameB, text=
'CB-B', style=
"Strace6.TCheckbutton", variable=Show_CBB, command=UpdateTimeTrace)
18762 CHB_cbb.pack(side=LEFT, anchor=W)
18763 CHB_Bsb = Spinbox(frameB, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18764 CHB_Bsb.bind(
'<MouseWheel>', onSpinBoxScroll)
18765 CHB_Bsb.bind(
"<Button-4>", onSpinBoxScroll)
18766 CHB_Bsb.bind(
"<Button-5>", onSpinBoxScroll)
18767 CHB_Bsb.pack(side=LEFT)
18768 CHB_Bsb.delete(0,
"end")
18769 CHB_Bsb.insert(0,0.5)
18770 CHB_Blab = Button(frameB, text=
"CB-B V/Div", style=
"Rtrace6.TButton", command=SetScaleMuxB)
18771 CHB_Blab.pack(side=LEFT)
18772 CHB_BPosEntry = Entry(frameB, width=5, cursor=
'double_arrow')
18773 CHB_BPosEntry.bind(
'<Return>', onTextKey)
18774 CHB_BPosEntry.bind(
'<MouseWheel>', onTextScroll)
18775 CHB_BPosEntry.bind(
"<Button-4>", onTextScroll)
18776 CHB_BPosEntry.bind(
"<Button-5>", onTextScroll)
18777 CHB_BPosEntry.bind(
'<Key>', onTextKey)
18778 CHB_BPosEntry.pack(side=LEFT)
18779 CHB_BPosEntry.delete(0,
"end")
18780 CHB_BPosEntry.insert(0,2.5)
18781 CHB_Bofflab = Button(frameB, text=
"CB-B Pos", style=
"Rtrace6.TButton", command=SetMuxBPoss)
18782 CHB_Bofflab.pack(side=LEFT)
18784 frameC = Frame(frameM)
18785 frameC.pack(side=TOP)
18786 CHB_cbc = Checkbutton(frameC, text=
'CB-C', style=
"Strace7.TCheckbutton", variable=Show_CBC, command=UpdateTimeTrace)
18787 CHB_cbc.pack(side=LEFT, anchor=W)
18788 CHB_Csb = Spinbox(frameC, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18789 CHB_Csb.bind(
'<MouseWheel>', onSpinBoxScroll)
18790 CHB_Csb.bind(
"<Button-4>", onSpinBoxScroll)
18791 CHB_Csb.bind(
"<Button-5>", onSpinBoxScroll)
18792 CHB_Csb.pack(side=LEFT)
18793 CHB_Csb.delete(0,
"end")
18794 CHB_Csb.insert(0,0.5)
18796 CHB_Clab = Button(frameC, text=
"CB-C V/Div", style=
"Rtrace7.TButton", command=SetScaleMuxC)
18797 CHB_Clab.pack(side=LEFT)
18798 CHB_CPosEntry = Entry(frameC, width=5, cursor=
'double_arrow')
18799 CHB_CPosEntry.bind(
'<Return>', onTextKey)
18800 CHB_CPosEntry.bind(
'<MouseWheel>', onTextScroll)
18801 CHB_CPosEntry.bind(
"<Button-4>", onTextScroll)
18802 CHB_CPosEntry.bind(
"<Button-5>", onTextScroll)
18803 CHB_CPosEntry.bind(
'<Key>', onTextKey)
18804 CHB_CPosEntry.pack(side=LEFT)
18805 CHB_CPosEntry.delete(0,
"end")
18806 CHB_CPosEntry.insert(0,2.5)
18807 CHB_Cofflab = Button(frameC, text=
"CB-C Pos", style=
"Rtrace7.TButton", command=SetMuxCPoss)
18808 CHB_Cofflab.pack(side=LEFT)
18810 frameD = Frame(frameM)
18811 frameD.pack(side=TOP)
18812 CHB_cbd = Checkbutton(frameD, text=
'CB-D', style=
"Strace4.TCheckbutton", variable=Show_CBD, command=UpdateTimeTrace)
18813 CHB_cbd.pack(side=LEFT, anchor=W)
18814 CHB_Dsb = Spinbox(frameD, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
18815 CHB_Dsb.bind(
'<MouseWheel>', onSpinBoxScroll)
18816 CHB_Dsb.bind(
"<Button-4>", onSpinBoxScroll)
18817 CHB_Dsb.bind(
"<Button-5>", onSpinBoxScroll)
18818 CHB_Dsb.pack(side=LEFT)
18819 CHB_Dsb.delete(0,
"end")
18820 CHB_Dsb.insert(0,0.5)
18821 CHB_Dlab = Button(frameD, text=
"CB-D V/Div", style=
"Rtrace4.TButton", command=SetScaleMuxD)
18822 CHB_Dlab.pack(side=LEFT)
18823 CHB_DPosEntry = Entry(frameD, width=5, cursor=
'double_arrow')
18824 CHB_DPosEntry.bind(
'<Return>', onTextKey)
18825 CHB_DPosEntry.bind(
'<MouseWheel>', onTextScroll)
18826 CHB_DPosEntry.bind(
"<Button-4>", onTextScroll)
18827 CHB_DPosEntry.bind(
"<Button-5>", onTextScroll)
18828 CHB_DPosEntry.bind(
'<Key>', onTextKey)
18829 CHB_DPosEntry.pack(side=LEFT)
18830 CHB_DPosEntry.delete(0,
"end")
18831 CHB_DPosEntry.insert(0,2.5)
18832 CHB_Dofflab = Button(frameD, text=
"CB-D Pos", style=
"Rtrace4.TButton", command=SetMuxDPoss)
18833 CHB_Dofflab.pack(side=LEFT)
18835 frameR = Frame(frameM)
18836 frameR.pack(side=TOP)
18837 RefTraceMenu = Menubutton(frameR, text=
"Reference Traces", width=17, style=
"W17.TButton")
18838 RefTraceMenu.menu = Menu(RefTraceMenu, tearoff = 0 )
18839 RefTraceMenu[
"menu"] = RefTraceMenu.menu
18840 RefTraceMenu.menu.add_command(label=
"-Take Snap Shot", command=BSnapShot)
18841 RefTraceMenu.menu.add_command(label=
"-Ref MUX trace-", foreground=
"blue", command=donothing)
18842 RefTraceMenu.menu.add_checkbutton(label=
'RMuxA', background=COLORtraceR2, variable=ShowRMA, command=UpdateTimeTrace)
18843 RefTraceMenu.menu.add_checkbutton(label=
'RMuxB', background=COLORtraceR6, variable=ShowRMB, command=UpdateTimeTrace)
18844 RefTraceMenu.menu.add_checkbutton(label=
'RMuxC', background=COLORtraceR7, variable=ShowRMC, command=UpdateTimeTrace)
18845 RefTraceMenu.menu.add_checkbutton(label=
'RMuxD', background=COLORtraceR4, variable=ShowRMD, command=UpdateTimeTrace)
18846 RefTraceMenu.pack(side=LEFT)
18848 frameE = Frame(frameM)
18849 frameE.pack(side=TOP)
18850 muxenab = Checkbutton(frameE, text=
"Mux-Enb", variable=MuxEnb)
18851 muxenab.pack(side=LEFT)
18852 SyncButton = Checkbutton(frameE, compound=TOP, image=hipulseimg, variable=MuxSync, command=SyncImage)
18853 SyncButton.pack(side=LEFT)
18854 dismissbutton = Button(frameE, text=
"Dismiss", style=
"W8.TButton", command=DestroyMuxScreen)
18855 dismissbutton.pack(side=LEFT)
18856 frameF = Frame(frameM)
18857 frameF.pack(side=TOP)
18858 dmx = Checkbutton(frameF, text=
'Dual Mux Split I/O mode', variable=DualMuxMode, command=SetDualMuxMode)
18859 dmx.pack(side=LEFT)
18860 frameCH = Frame(frameM)
18861 frameCH.pack(side=TOP)
18862 altmx = Radiobutton(frameCH, text=
'Alternate Sweep', variable=ChopMuxMode, value=0, command=SetChopMuxMode)
18863 altmx.pack(side=LEFT)
18864 chopmx = Radiobutton(frameCH, text=
'Chop Sweep', variable=ChopMuxMode, value=1, command=SetChopMuxMode)
18865 chopmx.pack(side=LEFT)
18866 frameCT = Frame(frameM)
18867 frameCT.pack(side=TOP)
18869 ChopTrigMenu = Menubutton(frameCT, text=
"Chop Mode Trigger", width=17, style=
"W17.TButton")
18870 ChopTrigMenu.menu = Menu(ChopTrigMenu, tearoff = 0 )
18871 ChopTrigMenu[
"menu"] = ChopTrigMenu.menu
18872 ChopTrigMenu.menu.add_command(label=
"-MUX Chan-", foreground=
"blue", command=donothing)
18873 ChopTrigMenu.menu.add_radiobutton(label=
"None", variable=ChopTrig, value=0)
18874 ChopTrigMenu.menu.add_radiobutton(label=
"Mux A", variable=ChopTrig, value=1)
18875 ChopTrigMenu.menu.add_radiobutton(label=
"Mux B", variable=ChopTrig, value=2)
18876 ChopTrigMenu.menu.add_radiobutton(label=
"Mux C", variable=ChopTrig, value=3)
18877 ChopTrigMenu.menu.add_radiobutton(label=
"Mux D", variable=ChopTrig, value=4)
18878 ChopTrigMenu.pack(side=LEFT)
18880 SaveMuxmenu = Menubutton(frameCT, text=
"Export csv", width=10, style=
"W17.TButton")
18881 SaveMuxmenu.menu = Menu(ChopTrigMenu, tearoff = 0 )
18882 SaveMuxmenu[
"menu"] = SaveMuxmenu.menu
18883 SaveMuxmenu.menu.add_command(label=
"Save Mux traces", command=BSaveMuxData)
18884 SaveMuxmenu.menu.add_command(label=
"Save single channel", command=BSaveChannelData)
18885 SaveMuxmenu.pack(side=LEFT)
18887 CHBlab.config(style=
"SGray.TButton")
18888 CHBofflab.config(style=
"SGray.TButton")
18891 if ShowBallonHelp > 0:
18892 CHB_Alab_tip =
CreateToolTip(CHB_Alab,
'Select CB-A vertical range/position axis to be used for markers and drawn color')
18893 CHB_Blab_tip =
CreateToolTip(CHB_Blab,
'Select CB-B vertical range/position axis to be used for markers and drawn color')
18894 CHB_Clab_tip =
CreateToolTip(CHB_Clab,
'Select CB-C vertical range/position axis to be used for markers and drawn color')
18895 CHB_Dlab_tip =
CreateToolTip(CHB_Dlab,
'Select CB-D vertical range/position axis to be used for markers and drawn color')
18896 CHB_Aofflab_tip =
CreateToolTip(CHB_Aofflab,
'Set CB-A position to DC average of signal')
18897 CHB_Bofflab_tip =
CreateToolTip(CHB_Bofflab,
'Set CB-B position to DC average of signal')
18898 CHB_Cofflab_tip =
CreateToolTip(CHB_Cofflab,
'Set CB-C position to DC average of signal')
18899 CHB_Dofflab_tip =
CreateToolTip(CHB_Dofflab,
'Set CB-D position to DC average of signal')
18900 ChopTrigMenu_tip =
CreateToolTip(ChopTrigMenu,
'Menu to Select Trigger Source')
18901 RefTraceMenu_tip =
CreateToolTip(RefTraceMenu,
'Menu to Select Mux Reference Traces')
18902 SaveMuxmenu_tip =
CreateToolTip(SaveMuxmenu,
'Menu to Export Mux Trace Data to .csv file')
18905 global AWGAIOMode, AWGBIOMode, ShowC1_V, DualMuxMode, CHAlab, CHAofflab
18906 global CHB_Clab, CHB_Dlab, CHB_Cofflab, CHB_Dofflab, CHB_cbc, CHB_cbd
18908 if DualMuxMode.get() == 1:
18912 CHB_cbc.config(text=
"CA-C")
18913 CHB_cbd.config(text=
"CA-D")
18914 CHB_Clab.config(text=
"CA-C V/Div")
18915 CHB_Dlab.config(text=
"CA-D V/Div")
18916 CHB_Cofflab.config(text=
"CA-C Pos")
18917 CHB_Dofflab.config(text=
"CA-D Pos")
18920 CHAlab.config(style=
"SGray.TButton")
18921 CHAofflab.config(style=
"SGray.TButton")
18924 CHB_cbc.config(text=
"CB-C")
18925 CHB_cbd.config(text=
"CB-D")
18926 CHB_Clab.config(text=
"CB-C V/Div")
18927 CHB_Dlab.config(text=
"CB-D V/Div")
18928 CHB_Cofflab.config(text=
"CB-C Pos")
18929 CHB_Dofflab.config(text=
"CB-D Pos")
18931 CHAlab.config(style=
"Rtrace1.TButton")
18932 CHAofflab.config(style=
"Rtrace1.TButton")
18935 global ChopMuxMode, AWGAIOMode, AWGBIOMode, AWGAMode, AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry
18936 global AWGAPhaseEntry, SAMPLErate, ShowC1_V, ShowC2_V, TgInput
18938 if ChopMuxMode.get() > 0:
18943 AWGAAmplEntry.delete(0,
"end")
18944 AWGAAmplEntry.insert(0,0.5)
18945 AWGAOffsetEntry.delete(0,
"end")
18946 AWGAOffsetEntry.insert(0,4.5)
18947 AWGAFreqEntry.delete(0,
"end")
18948 AWGAFreqEntry.insert(0,SAMPLErate/4)
18949 AWGAPhaseEntry.delete(0,
"end")
18950 AWGAPhaseEntry.insert(0,0)
18957 CHAlab.config(style=
"SGray.TButton")
18958 CHAofflab.config(style=
"SGray.TButton")
18960 CHAlab.config(style=
"Rtrace1.TButton")
18961 CHAofflab.config(style=
"Rtrace1.TButton")
18964 global MuxSync, hipulseimg, lowpulseimg, SyncButton
18966 if MuxSync.get() == 0:
18967 SyncButton.config(image=hipulseimg)
18969 SyncButton.config(image=lowpulseimg)
18972 global muxwindow, awgsync, MuxScreenStatus, CHAlab, CHAofflab, CHBlab, CHBofflab
18973 global ChopTrig, ChopMuxMode, MarkerScale
18975 MuxScreenStatus.set(0)
18976 awgsync.config(state=NORMAL)
18981 CHBlab.config(style=
"Rtrace2.TButton")
18982 CHBofflab.config(style=
"Rtrace2.TButton")
18983 CHAlab.config(style=
"Rtrace1.TButton")
18984 CHAofflab.config(style=
"Rtrace1.TButton")
18985 muxwindow.destroy()
18988 global Bodeca, GRWBP, XOLBP, GRHBP, Y0TBP, CANVASwidthBP, CANVASheightBP, FontSize
18990 CANVASwidthBP = event.width - 4
18991 CANVASheightBP = event.height - 4
18992 GRWBP = CANVASwidthBP - (2 * X0LBP)
18993 GRHBP = CANVASheightBP - int(10 * FontSize)
18997 global FStepSync, DevOne
18999 if FStepSync.get() == 0:
19000 Tval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
19001 elif FStepSync.get() == 1:
19002 devx.ctrl_transfer( 0x40, 0x50, 0, 0, 0, 0, 100)
19003 elif FStepSync.get() == 2:
19004 devx.ctrl_transfer( 0x40, 0x51, 0, 0, 0, 0, 100)
19007 global FSweepSync, DevOne
19009 if FSweepSync.get() == 0:
19010 Tval = devx.ctrl_transfer( 0xc0, 0x91, 1, 0, 0, 1, 100)
19011 elif FSweepSync.get() == 1:
19012 devx.ctrl_transfer( 0x40, 0x50, 1, 0, 0, 0, 100)
19013 elif FSweepSync.get() == 2:
19014 devx.ctrl_transfer( 0x40, 0x51, 1, 0, 0, 0, 100)
19017 global BDSweepFile, FileSweepFreq, FileSweepAmpl
19019 if BDSweepFile.get() > 0:
19021 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent = bodewindow)
19023 CSVFile = open(filename)
19024 csv_f = csv.reader(CSVFile)
19029 FileSweepFreq.append(float(row[0]))
19030 FileSweepAmpl.append(float(row[1]))
19032 print(
'skipping non-numeric row')
19033 FileSweepFreq = numpy.array(FileSweepFreq)
19034 FileSweepAmpl = numpy.array(FileSweepAmpl)
19035 MaxAmpl = numpy.amax(FileSweepAmpl)
19037 s = askstring(
"Normalize Max Amplitude",
"Max Amplitude = " + str(MaxAmpl) +
"\n\n Enter New Max value:\n in dB", parent = bodewindow)
19046 NormAmpl = MaxAmpl - v
19049 FileSweepAmpl = FileSweepAmpl - NormAmpl
19051 StopBodeEntry.delete(0,
"end")
19052 StopBodeEntry.insert(0,FileSweepFreq[len(FileSweepFreq)-1])
19053 StartBodeEntry.delete(0,
"end")
19054 StartBodeEntry.insert(0,FileSweepFreq[0])
19055 SweepStepBodeEntry.delete(0,
"end")
19056 SweepStepBodeEntry.insert(0,len(FileSweepFreq))
19058 showwarning(
"WARNING",
"No such file found or wrong format!", parent = bodewindow)
19062 global logo, SmoothCurvesBP, CutDC, bodewindow, SWRev
19063 global CANVASwidthBP, CANVASheightBP, FFTwindow, CutDC, AWGAMode, AWGAShape, AWGBMode
19064 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp, RelPhaseCenter
19065 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP, PhCenBodeEntry
19066 global BPSweepMode, BPSweepCont, Bodeca, BodeScreenStatus, RevDate, SweepStepBodeEntry
19067 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
19068 global GRWBP, GRHBP, X0LBP, FStepSync, FSweepSync, BDSweepFile, MinigenScreenStatus
19069 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, ImpedanceCenter, ImCenBodeEntry
19070 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
19071 global FrameRefief, BorderSize, LocalLanguage
19072 global sbode_tip, rbode_tip, bd3_tip, bd4_tip, bd5_tip, bd6_tip, bd7_tip, bd8_tip, bodismiss1button_tip
19073 global bstopfreqlab, bstartfreqlab, ImCenlab, BPhCenlab
19075 if BodeScreenStatus.get() == 0:
19076 BodeScreenStatus.set(1)
19079 CANVASwidthBP = GRWBP + 2 * X0LBP
19080 CANVASheightBP = GRHBP + 80
19085 bodewindow = Toplevel()
19086 bodewindow.title(
"Bode Plotter " + SWRev + RevDate)
19087 bodewindow.protocol(
"WM_DELETE_WINDOW", DestroyBodeScreen)
19088 frame2bp = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
19089 frame2bp.pack(side=RIGHT, expand=NO, fill=BOTH)
19091 frame2b = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
19092 frame2b.pack(side=TOP, expand=YES, fill=BOTH)
19094 Bodeca = Canvas(frame2b, width=CANVASwidthBP, height=CANVASheightBP, background=COLORcanvas, cursor=
'cross')
19095 Bodeca.bind(
'<Configure>', BodeCaresize)
19096 Bodeca.bind(
'<1>', onCanvasBodeLeftClick)
19097 Bodeca.bind(
'<3>', onCanvasBodeRightClick)
19098 Bodeca.bind(
"<Up>", onCanvasUpArrow)
19099 Bodeca.bind(
"<Down>", onCanvasDownArrow)
19100 Bodeca.bind(
"<Left>", onCanvasLeftArrow)
19101 Bodeca.bind(
"<Right>", onCanvasRightArrow)
19102 Bodeca.bind(
"<space>", onCanvasSpaceBar)
19103 Bodeca.bind(
"1", onCanvasBdOne)
19104 Bodeca.bind(
"2", onCanvasBdTwo)
19105 Bodeca.bind(
"3", onCanvasBdThree)
19106 Bodeca.bind(
"4", onCanvasBdFour)
19107 Bodeca.bind(
"5", onCanvasBdFive)
19108 Bodeca.bind(
"6", onCanvasBdSix)
19109 Bodeca.bind(
"7", onCanvasBdSeven)
19110 Bodeca.bind(
"8", onCanvasBdEight)
19111 Bodeca.bind(
"9", onCanvasBdNine)
19112 Bodeca.bind(
"0", onCanvasBdZero)
19113 Bodeca.bind(
"f", onCanvasShowBPcur)
19114 Bodeca.bind(
"d", onCanvasShowBdBcur)
19115 Bodeca.bind(
"h", onCanvasShowPdBcur)
19116 Bodeca.bind(
"s", onCanvasBdSnap)
19117 Bodeca.pack(side=TOP, expand=YES, fill=BOTH)
19120 dropmenu = Frame( frame2bp )
19121 dropmenu.pack(side=TOP)
19123 BodeFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
19124 BodeFilemenu.menu = Menu(BodeFilemenu, tearoff = 0 )
19125 BodeFilemenu[
"menu"] = BodeFilemenu.menu
19126 BodeFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigBP)
19127 BodeFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigBP)
19128 BodeFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
19129 BodeFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenBP)
19130 BodeFilemenu.menu.add_command(label=
"Save Data", command=BCSVfile)
19131 BodeFilemenu.pack(side=LEFT, anchor=W)
19133 BodeOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
19134 BodeOptionmenu.menu = Menu(BodeOptionmenu, tearoff = 0 )
19135 BodeOptionmenu[
"menu"] = BodeOptionmenu.menu
19136 BodeOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
19137 BodeOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesBP)
19138 BodeOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
19139 BodeOptionmenu.menu.add_command(label=
"Store trace (s)", command=BSTOREtraceBP)
19140 BodeOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
19141 BodeOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
19142 BodeOptionmenu.menu.add_command(label=
"-Step Sync Pulse-", command=donothing)
19143 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FStepSync, value=0, command=BStepSync)
19144 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FStepSync, value=1, command=BStepSync)
19145 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FStepSync, value=2, command=BStepSync)
19146 BodeOptionmenu.menu.add_command(label=
"-Sweep Sync Pulse-", command=donothing)
19147 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FSweepSync, value=0, command=BSweepSync)
19148 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FSweepSync, value=1, command=BSweepSync)
19149 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FSweepSync, value=2, command=BSweepSync)
19150 BodeOptionmenu.pack(side=LEFT, anchor=W)
19152 RUNframe = Frame( frame2bp )
19153 RUNframe.pack(side=TOP)
19154 rbode = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartBP)
19155 rbode.pack(side=LEFT)
19156 sbode = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopBP)
19157 sbode.pack(side=LEFT)
19159 BodeFFTwindmenu = Menubutton(frame2bp, text=
"FFTwindow", style=
"W11.TButton")
19160 BodeFFTwindmenu.menu = Menu(BodeFFTwindmenu, tearoff = 0 )
19161 BodeFFTwindmenu[
"menu"] = BodeFFTwindmenu.menu
19162 BodeFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
19163 BodeFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
19164 BodeFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
19165 BodeFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
19166 BodeFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
19167 BodeFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
19168 BodeFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
19169 BodeFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
19170 BodeFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
19171 BodeFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
19172 BodeFFTwindmenu.pack(side=TOP)
19174 tracemenu = Frame( frame2bp )
19175 tracemenu.pack(side=TOP)
19178 BodeShowmenu = Menubutton(tracemenu, text=
"Curves", style=
"W7.TButton")
19179 BodeShowmenu.menu = Menu(BodeShowmenu, tearoff = 0 )
19180 BodeShowmenu[
"menu"] = BodeShowmenu.menu
19181 BodeShowmenu.menu.add_command(label=
"-Show-", command=donothing)
19182 BodeShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllBP)
19183 BodeShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneBP)
19184 BodeShowmenu.menu.add_checkbutton(label=
'CA-dBV (1)', variable=ShowCA_VdB, command=UpdateBodeAll)
19185 BodeShowmenu.menu.add_checkbutton(label=
'CB-dBV (2)', variable=ShowCB_VdB, command=UpdateBodeAll)
19186 BodeShowmenu.menu.add_checkbutton(label=
'Phase A-B (3)', variable=ShowCA_P, command=UpdateBodeAll)
19187 BodeShowmenu.menu.add_checkbutton(label=
'Phase B-A (4)', variable=ShowCB_P, command=UpdateBodeAll)
19188 BodeShowmenu.menu.add_command(label=
"-Math-", command=donothing)
19189 BodeShowmenu.menu.add_radiobutton(label=
'None (0)', variable=ShowMathBP, value=0, command=UpdateBodeAll)
19190 BodeShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB (9)', variable=ShowMathBP, value=1, command=UpdateBodeAll)
19191 BodeShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB (8)', variable=ShowMathBP, value=2, command=UpdateBodeAll)
19192 BodeShowmenu.menu.add_command(label=
"-Impedance-", command=donothing)
19193 BodeShowmenu.menu.add_checkbutton(label=
'Series R', variable=Show_Rseries, command=UpdateBodeAll)
19194 BodeShowmenu.menu.add_checkbutton(label=
'Series X', variable=Show_Xseries, command=UpdateBodeAll)
19195 BodeShowmenu.menu.add_checkbutton(label=
'Series Mag', variable= Show_Magnitude, command=UpdateBodeAll)
19196 BodeShowmenu.menu.add_checkbutton(label=
'Series Ang', variable=Show_Angle, command=UpdateBodeAll)
19197 BodeShowmenu.menu.add_separator()
19198 BodeShowmenu.menu.add_checkbutton(label=
'RA-dBV (6)', variable=ShowCA_RdB, command=UpdateBodeAll)
19199 BodeShowmenu.menu.add_checkbutton(label=
'RB-dBV (7)', variable=ShowCB_RdB, command=UpdateBodeAll)
19200 BodeShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowCA_RP, command=UpdateBodeAll)
19201 BodeShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowCB_RP, command=UpdateBodeAll)
19202 BodeShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMathBP, command=UpdateBodeAll)
19203 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series R', variable=Show_RseriesRef, command=UpdateBodeAll)
19204 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series X', variable=Show_XseriesRef, command=UpdateBodeAll)
19205 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Mag', variable=Show_MagnitudeRef, command=UpdateBodeAll)
19206 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Ang', variable=Show_AngleRef, command=UpdateBodeAll)
19207 BodeShowmenu.pack(side=LEFT, anchor=W)
19209 BodeMarkmenu = Menubutton(tracemenu, text=
"Cursors", style=
"W7.TButton")
19210 BodeMarkmenu.menu = Menu(BodeMarkmenu, tearoff = 0 )
19211 BodeMarkmenu[
"menu"] = BodeMarkmenu.menu
19212 BodeMarkmenu.menu.add_command(label=
"-Cursors&Markers-", command=donothing)
19213 BodeMarkmenu.menu.add_checkbutton(label=
'Marker (5)', variable=ShowMarkerBP, command=UpdateBodeAll)
19214 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor', variable=ShowBPCur)
19215 BodeMarkmenu.menu.add_checkbutton(label=
'dB Cursor', variable=ShowBdBCur)
19216 BodeMarkmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowBdBCur, value=0)
19217 BodeMarkmenu.menu.add_radiobutton(label=
'dB Cursor (d)', variable=ShowBdBCur, value=1)
19218 BodeMarkmenu.menu.add_radiobutton(label=
'Phase Cursor (h)', variable=ShowBdBCur, value=2)
19219 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor (f)', variable=ShowBPCur)
19220 BodeMarkmenu.pack(side=LEFT, anchor=W)
19223 HzScale = Frame( frame2bp )
19224 HzScale.pack(side=TOP)
19225 brb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScaleBP, value=0, command=UpdateBodeTrace )
19226 brb1.pack(side=LEFT)
19227 brb2 = Radiobutton(HzScale, text=
"Log F", variable=HScaleBP, value=1, command=UpdateBodeTrace )
19228 brb2.pack(side=LEFT)
19230 DBrange = Frame( frame2bp )
19231 DBrange.pack(side=TOP)
19232 bd3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2BP)
19233 bd3.pack(side=LEFT)
19234 bd4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1BP)
19235 bd4.pack(side=LEFT)
19237 LVBrange = Frame( frame2bp )
19238 LVBrange.pack(side=TOP)
19239 bd5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4BP)
19240 bd5.pack(side=LEFT)
19241 bd6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3BP)
19242 bd6.pack(side=LEFT)
19244 LVSrange = Frame( frame2bp )
19245 LVSrange.pack(side=TOP)
19246 bd7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2BP)
19247 bd7.pack(side=LEFT)
19248 bd8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1BP)
19249 bd8.pack(side=LEFT)
19251 PhaseCenter = Frame( frame2bp )
19252 PhaseCenter.pack(side=TOP)
19253 BPhCenlab = Label(PhaseCenter, text=
"Center Phase on")
19254 BPhCenlab.pack(side=LEFT)
19255 PhCenBodeEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
19256 PhCenBodeEntry.bind(
'<Return>', onTextKey)
19257 PhCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19258 PhCenBodeEntry.bind(
"<Button-4>", onTextScroll)
19259 PhCenBodeEntry.bind(
"<Button-5>", onTextScroll)
19260 PhCenBodeEntry.bind(
'<Key>', onTextKey)
19261 PhCenBodeEntry.pack(side=LEFT)
19262 PhCenBodeEntry.delete(0,
"end")
19263 PhCenBodeEntry.insert(0,RelPhaseCenter.get())
19265 ImpedCenter = Frame( frame2bp )
19266 ImpedCenter.pack(side=TOP)
19267 ImCenlab = Label(ImpedCenter, text=
"Center Imped on")
19268 ImCenlab.pack(side=LEFT)
19269 ImCenBodeEntry = Entry(ImpedCenter, width=5, cursor=
'double_arrow')
19270 ImCenBodeEntry.bind(
'<Return>', onTextKey)
19271 ImCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19272 ImCenBodeEntry.bind(
"<Button-4>", onTextScroll)
19273 ImCenBodeEntry.bind(
"<Button-5>", onTextScroll)
19274 ImCenBodeEntry.bind(
'<Key>', onTextKey)
19275 ImCenBodeEntry.pack(side=LEFT)
19276 ImCenBodeEntry.delete(0,
"end")
19277 ImCenBodeEntry.insert(0,ImpedanceCenter.get())
19279 FSweepmenu = Label(frame2bp, text=
"-Sweep Gen-", style=
"A10B.TLabel")
19280 FSweepmenu.pack(side=TOP)
19282 Frange1 = Frame( frame2bp )
19283 Frange1.pack(side=TOP)
19284 bstartfreqlab = Label(Frange1, text=
"Start Freq")
19285 bstartfreqlab.pack(side=LEFT)
19286 StartBodeEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
19287 StartBodeEntry.bind(
'<Return>', onTextKey)
19288 StartBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19289 StartBodeEntry.bind(
"<Button-4>", onTextScroll)
19290 StartBodeEntry.bind(
"<Button-5>", onTextScroll)
19291 StartBodeEntry.bind(
'<Key>', onTextKey)
19292 StartBodeEntry.pack(side=LEFT)
19293 StartBodeEntry.delete(0,
"end")
19294 StartBodeEntry.insert(0,10)
19296 Frange2 = Frame( frame2bp )
19297 Frange2.pack(side=TOP)
19298 bstopfreqlab = Label(Frange2, text=
"Stop Freq")
19299 bstopfreqlab.pack(side=LEFT)
19300 StopBodeEntry = Entry(Frange2, width=5, cursor=
'double_arrow')
19301 StopBodeEntry.bind(
'<Return>', onTextKey)
19302 StopBodeEntry.bind(
'<MouseWheel>', onStopBodeScroll)
19303 StopBodeEntry.bind(
"<Button-4>", onTextScroll)
19304 StopBodeEntry.bind(
"<Button-5>", onTextScroll)
19305 StopBodeEntry.bind(
'<Key>', onTextKey)
19306 StopBodeEntry.pack(side=LEFT)
19307 StopBodeEntry.delete(0,
"end")
19308 StopBodeEntry.insert(0,10000)
19310 sgrb1 = Radiobutton(frame2bp, text=
'None', variable=FSweepMode, value=0)
19311 sgrb1.pack(side=TOP)
19312 Frange4 = Frame( frame2bp )
19313 Frange4.pack(side=TOP)
19314 sgrb2 = Radiobutton(Frange4, text=
'CH-A', variable=FSweepMode, value=1)
19315 sgrb2.pack(side=LEFT)
19316 sgrb3 = Radiobutton(Frange4, text=
'CH-B', variable=FSweepMode, value=2)
19317 sgrb3.pack(side=LEFT)
19318 if MinigenScreenStatus.get() > 0:
19319 sgrb1 = Radiobutton(frame2bp, text=
'MinGen', variable=FSweepMode, value=3)
19320 sgrb1.pack(side=TOP)
19321 ffcb = Checkbutton(frame2bp, text=
'Sweep From File', variable=BDSweepFile, command=BDSweepFromFile)
19322 ffcb.pack(side=TOP)
19323 Frange3 = Frame( frame2bp )
19324 Frange3.pack(side=TOP)
19325 sweepsteplab = Label(Frange3, text=
"Sweep Steps")
19326 sweepsteplab.pack(side=LEFT)
19327 SweepStepBodeEntry = Entry(Frange3, width=5, cursor=
'double_arrow')
19328 SweepStepBodeEntry.bind(
'<Return>', onTextKey)
19329 SweepStepBodeEntry.bind(
'<MouseWheel>', onTextScroll)
19330 SweepStepBodeEntry.bind(
"<Button-4>", onTextScroll)
19331 SweepStepBodeEntry.bind(
"<Button-5>", onTextScroll)
19332 SweepStepBodeEntry.bind(
'<Key>', onTextKey)
19333 SweepStepBodeEntry.pack(side=LEFT)
19334 SweepStepBodeEntry.delete(0,
"end")
19335 SweepStepBodeEntry.insert(0,100)
19337 sgrb5 = Radiobutton(frame2bp, text=
'Single', variable=FSweepCont, value=0)
19338 sgrb5.pack(side=TOP)
19339 sgrb6 = Radiobutton(frame2bp, text=
'Continuous', variable=FSweepCont, value=1)
19340 sgrb6.pack(side=TOP)
19341 Plotsframe = Frame( frame2bp )
19342 Plotsframe.pack(side=TOP)
19343 nyquistplotbutton = Button(Plotsframe, text=
"Polar Plot", style=
"W9.TButton", command=MakeNyquistPlot)
19344 nyquistplotbutton.pack(side=LEFT)
19345 nicholsplotbutton = Button(Plotsframe, text=
"Rect Plot", style=
"W8.TButton", command=MakeNicPlot)
19346 nicholsplotbutton.pack(side=LEFT)
19347 bodismiss1button = Button(frame2bp, text=
"Dismiss", style=
"W8.TButton", command=DestroyBodeScreen)
19348 bodismiss1button.pack(side=TOP)
19350 ADI2 = Label(frame2bp, image=logo, anchor=
"sw", compound=
"top")
19351 ADI2.pack(side=TOP)
19352 if ShowBallonHelp > 0:
19357 bd5_tip =
CreateToolTip(bd5,
'Increase Ref Level by 10 dB')
19358 bd6_tip =
CreateToolTip(bd6,
'Decrease Ref Level by 10 dB')
19361 bodismiss1button_tip =
CreateToolTip(bodismiss1button,
'Dismiss Bode Plot window')
19362 if LocalLanguage !=
"English":
19366 global bodewindow, BodeScreenStatus, ca, FSweepMode
19368 BodeScreenStatus.set(0)
19372 bodewindow.destroy()
19373 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
19376 global Freqca, GRWF, XOLF, GRHF, Y0TF, CANVASwidthF, CANVASheightF, FontSize
19378 CANVASwidthF = event.width - 4
19379 CANVASheightF = event.height - 4
19380 GRWF = CANVASwidthF - 10 - (2 * X0LF)
19381 GRHF = CANVASheightF - int(10 * FontSize)
19386 global logo, SmoothCurvesSA, CutDC, SingleShotSA, FFTwindow, freqwindow, SmoothCurvesSA
19387 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMarker, FreqDisp, ShowAWGASA
19388 global ShowRA_VdB, ShowRA_P, ShowRB_VdB, ShowRB_P, ShowMathSA, SWRev, SingleShotSA, ShowAWGBSA
19389 global ShowRMath, FSweepMode, FSweepCont, Freqca, SpectrumScreenStatus, RevDate, AWGShowAdvanced
19390 global HScale, StopFreqEntry, StartFreqEntry, ShowFCur, ShowdBCur, FCursor, dBCursor
19391 global CANVASwidthF, GRWF, X0LF, CANVASheightF, GRHF, FontSize, PhCenFreqEntry, RelPhaseCenter
19392 global FrameRefief, BorderSize, LocalLanguage, SAVScale, SAVPSD, SAvertmaxEntry, SAvertminEntry
19393 global sb_tip, rb_tip, bless_tip, bmore_tip, b3_tip, b4_tip, b5_tip, b6_tip, b7_tip, b8_tip, sadismiss1button_tip
19394 global SAMagdiv, SAVScale, SAvertmaxEntry, SAvertminEntry, SAVPSD
19396 if SpectrumScreenStatus.get() == 0:
19397 SpectrumScreenStatus.set(1)
19400 CANVASwidthF = GRWF + 10 + 2 * X0LF
19401 CANVASheightF = GRHF + int(10 * FontSize)
19402 freqwindow = Toplevel()
19403 freqwindow.title(
"Spectrum Analyzer " + SWRev + RevDate)
19404 freqwindow.protocol(
"WM_DELETE_WINDOW", DestroySpectrumScreen)
19405 frame2fr = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
19406 frame2fr.pack(side=RIGHT, expand=NO, fill=BOTH)
19408 frame2f = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
19409 frame2f.pack(side=TOP, expand=YES, fill=BOTH)
19411 Freqca = Canvas(frame2f, width=CANVASwidthF, height=CANVASheightF, background=COLORcanvas, cursor=
'cross')
19412 Freqca.bind(
'<Configure>', FreqCaresize)
19413 Freqca.bind(
'<1>', onCanvasFreqLeftClick)
19414 Freqca.bind(
'<3>', onCanvasFreqRightClick)
19415 Freqca.bind(
"<Up>", onCanvasUpArrow)
19416 Freqca.bind(
"<Down>", onCanvasDownArrow)
19417 Freqca.bind(
"<Left>", onCanvasLeftArrow)
19418 Freqca.bind(
"<Right>", onCanvasRightArrow)
19419 Freqca.bind(
"<space>", onCanvasSpaceBar)
19420 Freqca.bind(
"1", onCanvasSAOne)
19421 Freqca.bind(
"2", onCanvasSATwo)
19422 Freqca.bind(
"3", onCanvasSAThree)
19423 Freqca.bind(
"4", onCanvasSAFour)
19424 Freqca.bind(
"5", onCanvasSAFive)
19425 Freqca.bind(
"6", onCanvasSASix)
19426 Freqca.bind(
"7", onCanvasSASeven)
19427 Freqca.bind(
"8", onCanvasSAEight)
19428 Freqca.bind(
"9", onCanvasSANine)
19429 Freqca.bind(
"0", onCanvasSAZero)
19430 Freqca.bind(
"a", onCanvasSAAverage)
19431 Freqca.bind(
"n", onCanvasSANormal)
19432 Freqca.bind(
"p", onCanvasSAPeak)
19433 Freqca.bind(
"r", onCanvasSAReset)
19434 Freqca.bind(
"f", onCanvasShowFcur)
19435 Freqca.bind(
"d", onCanvasShowdBcur)
19436 Freqca.bind(
"h", onCanvasShowPcur)
19437 Freqca.bind(
"s", onCanvasSASnap)
19438 Freqca.pack(side=TOP, expand=YES, fill=BOTH)
19440 dropmenu = Frame( frame2fr )
19441 dropmenu.pack(side=TOP)
19443 SAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
19444 SAFilemenu.menu = Menu(SAFilemenu, tearoff = 0 )
19445 SAFilemenu[
"menu"] = SAFilemenu.menu
19446 SAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigSA)
19447 SAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigSA)
19448 SAFilemenu.menu.add_command(label=
"Run Script", command=RunScript)
19449 SAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenSA)
19450 SAFilemenu.menu.add_command(label=
"Save Data", command=STOREcsvfile)
19451 SAFilemenu.pack(side=LEFT, anchor=W)
19453 SAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
19454 SAOptionmenu.menu = Menu(SAOptionmenu, tearoff = 0 )
19455 SAOptionmenu[
"menu"] = SAOptionmenu.menu
19456 SAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
19457 SAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
19458 SAOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesSA)
19459 SAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
19460 SAOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceSA)
19461 SAOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
19462 SAOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
19463 SAOptionmenu.pack(side=LEFT, anchor=W)
19465 RUNframe = Frame( frame2fr )
19466 RUNframe.pack(side=TOP)
19467 sarb = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartSA)
19468 sarb.pack(side=LEFT)
19469 sasb = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopSA)
19470 sasb.pack(side=LEFT)
19472 Modeframe = Frame( frame2fr )
19473 Modeframe.pack(side=TOP)
19474 Modemenu = Menubutton(Modeframe, text=
"Mode", style=
"W5.TButton")
19475 Modemenu.menu = Menu(Modemenu, tearoff = 0 )
19476 Modemenu[
"menu"] = Modemenu.menu
19477 Modemenu.menu.add_command(label=
"Normal mode [n]", command=BNormalmode)
19478 Modemenu.menu.add_command(label=
"Peak hold [p]", command=BPeakholdmode)
19479 Modemenu.menu.add_command(label=
"Average [a]", command=BAveragemode)
19480 Modemenu.menu.add_command(label=
"Reset Average [r]", command=BResetFreqAvg)
19481 Modemenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShotSA)
19482 Modemenu.pack(side=LEFT)
19484 SAFFTwindmenu = Menubutton(Modeframe, text=
"FFTwindow", style=
"W11.TButton")
19485 SAFFTwindmenu.menu = Menu(SAFFTwindmenu, tearoff = 0 )
19486 SAFFTwindmenu[
"menu"] = SAFFTwindmenu.menu
19487 SAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
19488 SAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
19489 SAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
19490 SAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
19491 SAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
19492 SAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
19493 SAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
19494 SAFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
19495 SAFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
19496 SAFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
19497 SAFFTwindmenu.pack(side=LEFT)
19499 SamplesMenu = Frame( frame2fr )
19500 SamplesMenu.pack(side=TOP)
19501 bless = Button(SamplesMenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
19502 bless.pack(side=LEFT)
19503 bmore = Button(SamplesMenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
19504 bmore.pack(side=LEFT)
19508 MarkersMenu = Frame( frame2fr )
19509 MarkersMenu.pack(side=TOP)
19510 SAShowmenu = Menubutton(MarkersMenu, text=
"Curves", style=
"W7.TButton")
19511 SAShowmenu.menu = Menu(SAShowmenu, tearoff = 0 )
19512 SAShowmenu[
"menu"] = SAShowmenu.menu
19513 SAShowmenu.menu.add_command(label=
"-Show-", command=donothing)
19514 SAShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllSA)
19515 SAShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneSA)
19516 SAShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowC1_VdB, command=UpdateFreqAll)
19517 SAShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowC2_VdB, command=UpdateFreqAll)
19518 SAShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowC1_P, command=UpdateFreqAll)
19519 SAShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowC2_P, command=UpdateFreqAll)
19520 SAShowmenu.menu.add_command(label=
"-Math-", command=donothing)
19521 SAShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathSA, value=0, command=UpdateFreqAll)
19522 SAShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathSA, value=1, command=UpdateFreqAll)
19523 SAShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathSA, value=2, command=UpdateFreqAll)
19524 if AWGShowAdvanced.get() > 0:
19525 SAShowmenu.menu.add_command(label=
"-AWG-", command=donothing)
19526 SAShowmenu.menu.add_checkbutton(label=
'AWG A', variable=ShowAWGASA, command=UpdateFreqAll)
19527 SAShowmenu.menu.add_checkbutton(label=
'AWG B', variable=ShowAWGBSA, command=UpdateFreqAll)
19528 SAShowmenu.menu.add_command(label=
"-Ref Trace-", command=donothing)
19529 SAShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowRA_VdB, command=UpdateFreqAll)
19530 SAShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowRB_VdB, command=UpdateFreqAll)
19531 SAShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowRA_P, command=UpdateFreqAll)
19532 SAShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowRB_P, command=UpdateFreqAll)
19533 SAShowmenu.menu.add_checkbutton(label=
'Ref Math', variable=ShowRMath, command=UpdateFreqAll)
19534 SAShowmenu.pack(side=LEFT)
19535 SACursormenu = Menubutton(MarkersMenu, text=
"Cursors", style=
"W7.TButton")
19536 SACursormenu.menu = Menu(SACursormenu, tearoff = 0 )
19537 SACursormenu[
"menu"] = SACursormenu.menu
19538 SACursormenu.menu.add_command(label=
"-Marker-", command=donothing)
19539 SACursormenu.menu.add_radiobutton(label=
'Markers Off', variable=ShowMarker, value=0, command=UpdateFreqAll)
19540 SACursormenu.menu.add_radiobutton(label=
'Markers [5]', variable=ShowMarker, value=1, command=UpdateFreqAll)
19541 SACursormenu.menu.add_radiobutton(label=
'Delta Markers', variable=ShowMarker, value=2, command=UpdateFreqAll)
19542 SACursormenu.menu.add_command(label=
"-Cursors-", command=donothing)
19543 SACursormenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowdBCur, value=0)
19544 SACursormenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowdBCur, value=1)
19546 SACursormenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowFCur)
19547 SACursormenu.pack(side=LEFT)
19549 Frange1 = Frame( frame2fr )
19550 Frange1.pack(side=TOP)
19551 startfreqlab = Label(Frange1, text=
"Startfreq")
19552 startfreqlab.pack(side=LEFT)
19553 StartFreqEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
19554 StartFreqEntry.bind(
'<Return>', onTextKey)
19555 StartFreqEntry.bind(
'<MouseWheel>', onTextScroll)
19556 StartFreqEntry.bind(
"<Button-4>", onTextScroll)
19557 StartFreqEntry.bind(
"<Button-5>", onTextScroll)
19558 StartFreqEntry.bind(
'<Key>', onTextKey)
19559 StartFreqEntry.pack(side=LEFT)
19560 StartFreqEntry.delete(0,
"end")
19561 StartFreqEntry.insert(0,10)
19563 Frange2 = Frame( frame2fr )
19564 Frange2.pack(side=TOP)
19565 stopfreqlab = Label(Frange2, text=
"Stopfreq")
19566 stopfreqlab.pack(side=LEFT)
19567 StopFreqEntry = Entry(Frange2, width=7, cursor=
'double_arrow')
19568 StopFreqEntry.bind(
'<Return>', onTextKey)
19569 StopFreqEntry.bind(
'<MouseWheel>', onStopfreqScroll)
19570 StopFreqEntry.bind(
"<Button-4>", onStopfreqScroll)
19571 StopFreqEntry.bind(
"<Button-5>", onStopfreqScroll)
19572 StopFreqEntry.bind(
'<Key>', onTextKey)
19573 StopFreqEntry.pack(side=LEFT)
19574 StopFreqEntry.delete(0,
"end")
19575 StopFreqEntry.insert(0,10000)
19577 HzScale = Frame( frame2fr )
19578 HzScale.pack(side=TOP)
19579 sarb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScale, value=0, command=UpdateFreqTrace )
19580 sarb1.pack(side=LEFT)
19581 sarb2 = Radiobutton(HzScale, text=
"Log F", variable=HScale, value=1, command=UpdateFreqTrace )
19582 sarb2.pack(side=LEFT)
19584 PhaseCenter = Frame( frame2fr )
19585 PhaseCenter.pack(side=TOP)
19586 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
19587 PhCenlab.pack(side=LEFT)
19588 PhCenFreqEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
19589 PhCenFreqEntry.bind(
'<Return>', onTextKey)
19590 PhCenFreqEntry.bind(
'<MouseWheel>', onTextScroll)
19591 PhCenFreqEntry.bind(
"<Button-4>", onTextScroll)
19592 PhCenFreqEntry.bind(
"<Button-5>", onTextScroll)
19593 PhCenFreqEntry.bind(
'<Key>', onTextKey)
19594 PhCenFreqEntry.pack(side=LEFT)
19595 PhCenFreqEntry.delete(0,
"end")
19596 PhCenFreqEntry.insert(0,RelPhaseCenter.get())
19598 vertlabel = Label( frame2fr, text=
"Vertical Scale" )
19599 vertlabel.pack(side=TOP)
19600 savrb0 = Radiobutton(frame2fr, text=
"In dB", variable=SAVScale, value=0, command=UpdateFreqTrace )
19601 savrb0.pack(side=TOP)
19603 DBrange = Frame( frame2fr )
19604 DBrange.pack(side=TOP)
19605 sab3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2)
19606 sab3.pack(side=LEFT)
19607 sab4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1)
19608 sab4.pack(side=LEFT)
19610 LVBrange = Frame( frame2fr )
19611 LVBrange.pack(side=TOP)
19612 sab5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4)
19613 sab5.pack(side=LEFT)
19614 sab6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3)
19615 sab6.pack(side=LEFT)
19617 LVSrange = Frame( frame2fr )
19618 LVSrange.pack(side=TOP)
19619 sab7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2)
19620 sab7.pack(side=LEFT)
19621 sab8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1)
19622 sab8.pack(side=LEFT)
19624 vertscale = Frame( frame2fr )
19625 vertscale.pack(side=TOP)
19626 savlab1 = Label(vertscale, text=
"V RMS")
19627 savlab1.pack(side=LEFT)
19628 savrb1 = Radiobutton(vertscale, text=
"Lin", variable=SAVScale, value=1, command=UpdateFreqTrace )
19629 savrb1.pack(side=LEFT)
19630 savrb2 = Radiobutton(vertscale, text=
"Log", variable=SAVScale, value=2, command=UpdateFreqTrace )
19631 savrb2.pack(side=LEFT)
19632 sapsdcb = Checkbutton(frame2fr, text=
"PSD (sqrt Hz)", variable=SAVPSD)
19633 sapsdcb.pack(side=TOP)
19635 vertmax = Frame( frame2fr )
19636 vertmax.pack(side=TOP)
19637 vertmaxlab = Label(vertmax, text=
"VRMS Max")
19638 vertmaxlab.pack(side=LEFT)
19639 SAvertmaxEntry = Spinbox(vertmax, width=6, cursor=
'double_arrow', values=SAMagdiv, command=BCHBIlevel)
19640 SAvertmaxEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
19641 SAvertmaxEntry.bind(
"<Button-4>", onSpinBoxScroll)
19642 SAvertmaxEntry.bind(
"<Button-5>", onSpinBoxScroll)
19643 SAvertmaxEntry.delete(0,
"end")
19644 SAvertmaxEntry.insert(0,
"1.0")
19645 SAvertmaxEntry.pack(side=LEFT)
19656 vertmin = Frame( frame2fr )
19657 vertmin.pack(side=TOP)
19658 vertminlab = Label(vertmin, text=
"VRMS Min")
19659 vertminlab.pack(side=LEFT)
19660 SAvertminEntry = Spinbox(vertmin, width=6, cursor=
'double_arrow', values=SAMagdiv, command=BCHBIlevel)
19661 SAvertminEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
19662 SAvertminEntry.bind(
"<Button-4>", onSpinBoxScroll)
19663 SAvertminEntry.bind(
"<Button-5>", onSpinBoxScroll)
19664 SAvertminEntry.pack(side=LEFT)
19665 SAvertminEntry.delete(0,
"end")
19666 SAvertminEntry.insert(0,
"100uV")
19677 sadismiss1button = Button(frame2fr, text=
"Dismiss", style=
"W8.TButton", command=DestroySpectrumScreen)
19678 sadismiss1button.pack(side=TOP)
19680 ADI2 = Label(frame2fr, image=logo, anchor=
"sw", compound=
"top")
19681 ADI2.pack(side=TOP)
19682 if ShowBallonHelp > 0:
19693 sadismiss1button_tip =
CreateToolTip(sadismiss1button,
'Dismiss Spectrum Analyzer window')
19694 if LocalLanguage !=
"English":
19698 global freqwindow, SpectrumScreenStatus, ca
19700 SpectrumScreenStatus.set(0)
19703 freqwindow.destroy()
19704 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
19707 global XYca, GRWXY, XOLXY, GRHXY, Y0TXY, CANVASwidthXY, CANVASheightXY, FontSize
19708 global YminXY, YmaxXY, XminXY, XmaxXY
19710 XOLXY = FontSize * 7
19711 CANVASwidthXY = event.width - 4
19712 CANVASheightXY = event.height - 4
19713 GRWXY = CANVASwidthXY - (2*X0LXY)
19714 GRHXY = CANVASheightXY - int(10 * FontSize)
19716 YmaxXY = Y0TXY + GRHXY
19718 XmaxXY = X0LXY + GRWXY
19723 global logo, CANVASwidthXY, CANVASheightXY, Xsignal, EnableUserEntries
19724 global YsignalVA, YsignalVB, YsignalIA, YsignalIB, YsignalM, YsignalMX, YsignalMY
19725 global XYRefAV, XYRefAI, XYRefBV, XYRefBI, XYRefM, XYRefMX, XYRefMY
19726 global XYScreenStatus, MarkerXYScale, XYca, xywindow, RevDate, SWRev, XYDisp
19727 global CHAsbxy, CHBsbxy, CHAxylab, CHBxylab, CHAVPosEntryxy, CHBVPosEntryxy
19728 global CHAIsbxy, CHBIsbxy, CHAIPosEntryxy, CHBIPosEntryxy, ScreenXYrefresh
19729 global YminXY, Y0TXY, YmaxXY, GRHXY, XminXY, X0LXY, XmaxXY, X0LXY, GRWXY, CANVASwidthXY, CANVASheightXY
19730 global FrameRefief, BorderSize, LocalLanguage, User3Entry, User4Entry
19731 global math_tip, bsxy_tip, brxy_tip, snapbutton_tip, savebutton_tip, dismissxybutton_tip, CHAxylab_tip
19732 global CHBxylab_tip, CHAxyofflab_tip, CHBxyofflab_tip, CHAIxyofflab_tip, CHBIxyofflab_tip
19734 if XYScreenStatus.get() == 0:
19735 XYScreenStatus.set(1)
19739 YmaxXY = Y0TXY + GRHXY
19741 XmaxXY = X0LXY + GRWXY
19742 CANVASwidthXY = GRWXY + (2*X0LXY)
19743 CANVASheightXY = GRHXY + 80
19744 xywindow = Toplevel()
19745 xywindow.title(
"X-Y Plot " + SWRev + RevDate)
19746 xywindow.protocol(
"WM_DELETE_WINDOW", DestroyXYScreen)
19747 frame2xyr = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19748 frame2xyr.pack(side=RIGHT, expand=NO, fill=BOTH)
19750 frame2xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19751 frame2xy.pack(side=TOP, expand=YES, fill=BOTH)
19753 frame3xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19754 frame3xy.pack(side=TOP, expand=NO, fill=BOTH)
19756 frame4xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
19757 frame4xy.pack(side=TOP, expand=NO, fill=BOTH)
19759 XYca = Canvas(frame2xy, width=CANVASwidthXY, height=CANVASheightXY, background=COLORcanvas, cursor=
'cross')
19760 XYca.bind(
'<Configure>', XYcaresize)
19761 XYca.bind(
'<1>', onCanvasXYLeftClick)
19762 XYca.bind(
'<3>', onCanvasXYRightClick)
19763 XYca.bind(
"<Motion>",onCanvasMouse_xy)
19764 XYca.bind(
'<MouseWheel>', onCanvasXYScrollClick)
19765 XYca.bind(
"<Button-4>", onCanvasXYScrollClick)
19766 XYca.bind(
"<Button-5>", onCanvasXYScrollClick)
19767 XYca.bind(
"<Up>", onCanvasUpArrow)
19768 XYca.bind(
"<Down>", onCanvasDownArrow)
19769 XYca.bind(
"<Left>", onCanvasLeftArrow)
19770 XYca.bind(
"<Right>", onCanvasRightArrow)
19771 XYca.bind(
"<space>", onCanvasSpaceBar)
19772 XYca.bind(
"a", onCanvasAverage)
19773 XYca.pack(side=TOP, fill=BOTH, expand=YES)
19775 RUNframe = Frame( frame2xyr )
19776 RUNframe.pack(side=TOP)
19777 rbxy = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStart)
19778 rbxy.pack(side=LEFT)
19779 sbxy = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStop)
19780 sbxy.pack(side=LEFT)
19782 mathbt = Button(frame2xyr, text=
"Math", style=
"W5.TButton", command = NewEnterMathControls)
19783 mathbt.pack(side=TOP)
19786 AxisLabX = Label(frame2xyr, text =
"-X Axis-", style=
"A10R1.TLabelframe.Label")
19787 AxisLabX.pack(side=TOP)
19788 chaxmenu = Frame( frame2xyr )
19789 chaxmenu.pack(side=TOP)
19790 rbx2 = Radiobutton(chaxmenu, text=
'CA-V', variable=Xsignal, value=1, command=UpdateXYTrace)
19791 rbx2.pack(side=LEFT, anchor=W)
19792 rbx3 = Radiobutton(chaxmenu, text=
'CA-I', variable=Xsignal, value=2, command=UpdateXYTrace)
19793 rbx3.pack(side=LEFT, anchor=W)
19794 chbxmenu = Frame( frame2xyr )
19795 chbxmenu.pack(side=TOP)
19796 rbx4 = Radiobutton(chbxmenu, text=
'CB-V', variable=Xsignal, value=3, command=UpdateXYTrace)
19797 rbx4.pack(side=LEFT, anchor=W)
19798 rbx5 = Radiobutton(chbxmenu, text=
'CB-I', variable=Xsignal, value=4, command=UpdateXYTrace)
19799 rbx5.pack(side=LEFT, anchor=W)
19800 rbx7 = Radiobutton(frame2xyr, text=
'Histogram CA-V', variable=Xsignal, value=6, command=BHistAsPercent)
19801 rbx7.pack(side=TOP)
19802 rbx8 = Radiobutton(frame2xyr, text=
'Histogram CB-V', variable=Xsignal, value=7, command=BHistAsPercent)
19803 rbx8.pack(side=TOP)
19804 rbx6 = Radiobutton(frame2xyr, text=
'Math', variable=Xsignal, value=5, command=UpdateXYTrace)
19805 rbx6.pack(side=TOP)
19807 AxisLabY = Label(frame2xyr, text =
"-Y Axis-", style=
"A10R2.TLabelframe.Label")
19808 AxisLabY.pack(side=TOP)
19809 chaymenu = Frame( frame2xyr )
19810 chaymenu.pack(side=TOP)
19811 rby2 = Checkbutton(chaymenu, text=
'CA-V', variable=YsignalVA, command=UpdateXYTrace)
19812 rby2.pack(side=LEFT, anchor=W)
19813 rby3 = Checkbutton(chaymenu, text=
'CA-I', variable=YsignalIA, command=UpdateXYTrace)
19814 rby3.pack(side=LEFT, anchor=W)
19815 chbymenu = Frame( frame2xyr )
19816 chbymenu.pack(side=TOP)
19817 rby4 = Checkbutton(chbymenu, text=
'CB-V', variable=YsignalVB, command=UpdateXYTrace)
19818 rby4.pack(side=LEFT, anchor=W)
19819 rby5 = Checkbutton(chbymenu, text=
'CB-I', variable=YsignalIB, command=UpdateXYTrace)
19820 rby5.pack(side=LEFT, anchor=W)
19821 rby7 = Checkbutton(frame2xyr, text=
'Math', variable=YsignalM, command=UpdateXYTrace)
19822 rby7.pack(side=TOP)
19823 mymenu = Frame( frame2xyr )
19824 mymenu.pack(side=TOP)
19825 rby7 = Checkbutton(mymenu, text=
'Math-X', variable=YsignalMX, command=UpdateXYTrace)
19826 rby7.pack(side=LEFT, anchor=W)
19827 rby8 = Checkbutton(mymenu, text=
'Math-Y', variable=YsignalMY, command=UpdateXYTrace)
19828 rby8.pack(side=LEFT, anchor=W)
19830 cursormenu = Frame( frame2xyr )
19831 cursormenu.pack(side=TOP)
19832 cb1 = Checkbutton(cursormenu, text=
'X-Cur', variable=ShowXCur)
19833 cb1.pack(side=LEFT, anchor=W)
19834 cb2 = Checkbutton(cursormenu, text=
'Y-Cur', variable=ShowYCur)
19835 cb2.pack(side=LEFT, anchor=W)
19836 cb4 = Checkbutton(frame2xyr, text=
'Persistance', variable=ScreenXYrefresh, command=UpdateXYTrace)
19840 XYrefmenu = Menubutton(frame2xyr, text=
"Ref Traces", style=
"W11.TButton")
19841 XYrefmenu.menu = Menu(XYrefmenu, tearoff = 0 )
19842 XYrefmenu[
"menu"] = XYrefmenu.menu
19843 XYrefmenu.menu.add_command(label=
"Save SnapShot", command=BSnapShotXY)
19844 XYrefmenu.menu.add_checkbutton(label=
"CA-V", variable=XYRefAV, command=UpdateXYTrace)
19845 XYrefmenu.menu.add_checkbutton(label=
"CA-I", variable=XYRefAI, command=UpdateXYTrace)
19846 XYrefmenu.menu.add_checkbutton(label=
"CB-V", variable=XYRefBV, command=UpdateXYTrace)
19847 XYrefmenu.menu.add_checkbutton(label=
"CB-I", variable=XYRefBI, command=UpdateXYTrace)
19848 XYrefmenu.menu.add_checkbutton(label=
"Math", variable=XYRefM, command=UpdateXYTrace)
19849 XYrefmenu.menu.add_checkbutton(label=
"Math-X", variable=XYRefMX, command=UpdateXYTrace)
19850 XYrefmenu.menu.add_checkbutton(label=
"Math-Y", variable=XYRefMY, command=UpdateXYTrace)
19851 XYrefmenu.pack(side=TOP)
19854 dismissxybutton = Button(frame2xyr, style=
"W7.TButton", text=
"Dismiss", command=DestroyXYScreen)
19855 dismissxybutton.pack(side=TOP)
19857 if EnableUserEntries > 0:
19858 UserEnt = Frame( frame2xyr )
19859 UserEnt.pack(side=TOP)
19860 userentlab = Button(UserEnt, text=
"User", width=4, style=
"W4.TButton")
19861 userentlab.pack(side=LEFT,fill=X)
19862 User3Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
19863 User3Entry.bind(
'<Return>', onTextKey)
19864 User3Entry.bind(
'<MouseWheel>', onTextScroll)
19865 User3Entry.bind(
"<Button-4>", onTextScroll)
19866 User3Entry.bind(
"<Button-5>", onTextScroll)
19867 User3Entry.bind(
'<Key>', onTextKey)
19868 User3Entry.pack(side=LEFT)
19869 User3Entry.delete(0,
"end")
19870 User3Entry.insert(0,0.0)
19871 User4Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
19872 User4Entry.bind(
'<Return>', onTextKey)
19873 User4Entry.bind(
'<MouseWheel>', onTextScroll)
19874 User4Entry.bind(
"<Button-4>", onTextScroll)
19875 User4Entry.bind(
"<Button-5>", onTextScroll)
19876 User4Entry.bind(
'<Key>', onTextKey)
19877 User4Entry.pack(side=LEFT)
19878 User4Entry.delete(0,
"end")
19879 User4Entry.insert(0,0.0)
19881 ADI1xy = Label(frame2xyr, image=logo, anchor=
"sw", compound=
"top")
19882 ADI1xy.pack(side=TOP)
19884 MarkerXYScale = IntVar(0)
19885 MarkerXYScale.set(1)
19887 CHAsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
19888 CHAsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19889 CHAsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19890 CHAsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19891 CHAsbxy.pack(side=LEFT)
19892 CHAsbxy.delete(0,
"end")
19893 CHAsbxy.insert(0,0.5)
19894 CHAxylab = Button(frame3xy, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetXYScaleA)
19895 CHAxylab.pack(side=LEFT)
19897 CHAVPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
19898 CHAVPosEntryxy.bind(
'<Return>', onTextKey)
19899 CHAVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19900 CHAVPosEntryxy.bind(
"<Button-4>", onTextScroll)
19901 CHAVPosEntryxy.bind(
"<Button-5>", onTextScroll)
19902 CHAVPosEntryxy.bind(
'<Key>', onTextKey)
19903 CHAVPosEntryxy.pack(side=LEFT)
19904 CHAVPosEntryxy.delete(0,
"end")
19905 CHAVPosEntryxy.insert(0,2.5)
19906 CHAofflabxy = Button(frame3xy, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetXYVAPoss)
19907 CHAofflabxy.pack(side=LEFT)
19909 CHAIsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHipdiv)
19910 CHAIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19911 CHAIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19912 CHAIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19913 CHAIsbxy.pack(side=LEFT)
19914 CHAIsbxy.delete(0,
"end")
19915 CHAIsbxy.insert(0,50.0)
19916 CHAIlabxy = Label(frame3xy, text=
"CA mA/Div", style=
"Strace3.TButton")
19917 CHAIlabxy.pack(side=LEFT)
19919 CHAIPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
19920 CHAIPosEntryxy.bind(
'<Return>', onTextKey)
19921 CHAIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19922 CHAIPosEntryxy.bind(
"<Button-4>", onTextScroll)
19923 CHAIPosEntryxy.bind(
"<Button-5>", onTextScroll)
19924 CHAIPosEntryxy.bind(
'<Key>', onTextKey)
19925 CHAIPosEntryxy.pack(side=LEFT)
19926 CHAIPosEntryxy.delete(0,
"end")
19927 CHAIPosEntryxy.insert(0,0.0)
19928 CHAIofflabxy = Button(frame3xy, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetXYIAPoss)
19929 CHAIofflabxy.pack(side=LEFT)
19931 CHBsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
19932 CHBsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19933 CHBsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19934 CHBsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19935 CHBsbxy.pack(side=LEFT)
19936 CHBsbxy.delete(0,
"end")
19937 CHBsbxy.insert(0,0.5)
19939 CHBxylab = Button(frame4xy, text=
"CB V/Div", style=
"Strace2.TButton", command=SetXYScaleB)
19940 CHBxylab.pack(side=LEFT)
19942 CHBVPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
19943 CHBVPosEntryxy.bind(
'<Return>', onTextKey)
19944 CHBVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19945 CHBVPosEntryxy.bind(
"<Button-4>", onTextScroll)
19946 CHBVPosEntryxy.bind(
"<Button-5>", onTextScroll)
19947 CHBVPosEntryxy.bind(
'<Key>', onTextKey)
19948 CHBVPosEntryxy.pack(side=LEFT)
19949 CHBVPosEntryxy.delete(0,
"end")
19950 CHBVPosEntryxy.insert(0,2.5)
19951 CHBofflabxy = Button(frame4xy, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetXYVBPoss)
19952 CHBofflabxy.pack(side=LEFT)
19954 CHBIsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHipdiv)
19955 CHBIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
19956 CHBIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
19957 CHBIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
19958 CHBIsbxy.pack(side=LEFT)
19959 CHBIsbxy.delete(0,
"end")
19960 CHBIsbxy.insert(0,50.0)
19961 CHBIlabxy = Label(frame4xy, text=
"CB mA/Div", style=
"Strace4.TButton")
19962 CHBIlabxy.pack(side=LEFT)
19964 CHBIPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
19965 CHBIPosEntryxy.bind(
'<Return>', onTextKey)
19966 CHBIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
19967 CHBIPosEntryxy.bind(
"<Button-4>", onTextScroll)
19968 CHBIPosEntryxy.bind(
"<Button-5>", onTextScroll)
19969 CHBIPosEntryxy.bind(
'<Key>', onTextKey)
19970 CHBIPosEntryxy.pack(side=LEFT)
19971 CHBIPosEntryxy.delete(0,
"end")
19972 CHBIPosEntryxy.insert(0,0.0)
19973 CHBIofflabxy = Button(frame4xy, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetXYIBPoss)
19974 CHBIofflabxy.pack(side=LEFT)
19976 if ShowBallonHelp > 0:
19987 CHAxylab_tip =
CreateToolTip(CHAxylab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
19988 CHBxylab_tip =
CreateToolTip(CHBxylab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
19989 CHAxyofflab_tip =
CreateToolTip(CHAofflabxy,
'Set CHA-V position to DC average of signal')
19990 CHBxyofflab_tip =
CreateToolTip(CHBofflabxy,
'Set CHB-V position to DC average of signal')
19991 CHAIxyofflab_tip =
CreateToolTip(CHAIofflabxy,
'Set CHA-I position to DC average of signal')
19992 CHBIxyofflab_tip =
CreateToolTip(CHBIofflabxy,
'Set CHB-I position to DC average of signal')
19993 if LocalLanguage !=
"English":
19997 global xywindow, XYScreenStatus, ca, XYDisp
19999 XYScreenStatus.set(0)
20003 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
20008 global DevID, devx, CHA, CHB, RevDate, OnBoardRes, AD584act, FWRevOne
20009 global discontloop, contloop, session, AWGSync, SWRev
20012 if FWRevOne < 2.06:
20013 showwarning(
"WARNING",
"Out of date Firmware Revision!")
20015 calwindow = Toplevel()
20016 calwindow.title(
"ALM1000 Calibration tool " + SWRev + RevDate)
20018 SCallab = Label(calwindow, text=
"Channel Gain / Offset calibration")
20019 SCallab.grid(row=0, column=0, columnspan=2, sticky=W)
20020 labelA0 = Label(calwindow, style=
"A12B.TLabel")
20021 labelA0.grid(row=1, column=0, columnspan=2, sticky=W)
20022 labelA0.config(text =
"CA gnd Volts")
20023 labelAMax = Label(calwindow, style=
"A12B.TLabel")
20024 labelAMax.grid(row=2, column=0, columnspan=2, sticky=W)
20025 labelAMax.config(text =
"CA 584 Volts")
20026 labelAMin = Label(calwindow, style=
"A12B.TLabel")
20027 labelAMin.grid(row=3, column=0, columnspan=2, sticky=W)
20028 labelAMin.config(text =
"CA 5V Src I ")
20029 labelB0 = Label(calwindow, style=
"A12B.TLabel")
20030 labelB0.grid(row=4, column=0, columnspan=2, sticky=W)
20031 labelB0.config(text =
"CA gnd Volts")
20032 labelBMax = Label(calwindow, style=
"A12B.TLabel")
20033 labelBMax.grid(row=5, column=0, columnspan=2, sticky=W)
20034 labelBMax.config(text =
"CB 584 Volts")
20035 labelBMin = Label(calwindow, style=
"A12B.TLabel")
20036 labelBMin.grid(row=6, column=0, columnspan=2, sticky=W)
20037 labelBMin.config(text =
"CB 5V Src I ")
20038 labelAB = Label(calwindow, style=
"A12B.TLabel")
20039 labelAB.grid(row=7, column=0, columnspan=2, sticky=W)
20040 labelAB.config(text =
"CA 0V Src I")
20041 labelBA = Label(calwindow, style=
"A12B.TLabel")
20042 labelBA.grid(row=8, column=0, columnspan=2, sticky=W)
20043 labelBA.config(text =
"CA 0V Src I")
20044 labelSIA0 = Label(calwindow, style=
"A12B.TLabel")
20045 labelSIA0.grid(row=9, column=0, columnspan=2, sticky=W)
20046 labelSIA0.config(text =
"CA 2.5 Src 0 I")
20047 labelSIA = Label(calwindow, style=
"A12B.TLabel")
20048 labelSIA.grid(row=10, column=0, columnspan=2, sticky=W)
20049 labelSIA.config(text =
"CA 50 Src 100 ")
20050 labelSIAN = Label(calwindow, style=
"A12B.TLabel")
20051 labelSIAN.grid(row=11, column=0, columnspan=2, sticky=W)
20052 labelSIAN.config(text =
"CA 50 Src -45")
20053 labelSIB0 = Label(calwindow, style=
"A12B.TLabel")
20054 labelSIB0.grid(row=12, column=0, columnspan=2, sticky=W)
20055 labelSIB0.config(text =
"CB 2.5 Src 0 I")
20056 labelSIB = Label(calwindow, style=
"A12B.TLabel")
20057 labelSIB.grid(row=13, column=0, columnspan=2, sticky=W)
20058 labelSIB.config(text =
"CB 50 Src 100 ")
20059 labelSIBN = Label(calwindow, style=
"A12B.TLabel")
20060 labelSIBN.grid(row=14, column=0, columnspan=2, sticky=W)
20061 labelSIBN.config(text =
"CB 50 Src -45")
20063 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
20064 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
20067 if session.continuous:
20068 print(
"ending session")
20071 if askyesno(
"Reset Calibration",
"Do You Need To Reset Default Calibration?", parent=calwindow):
20074 devx.write_calibration(
"calib_default.txt")
20077 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Default Cal File",
"*.txt")], parent=calwindow)
20078 devx.write_calibration(filename)
20081 devidstr = DevID[17:31]
20082 filename =
"calib" + devidstr +
".txt"
20083 if os.path.isfile(filename):
20084 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?", parent=calwindow):
20085 devx.write_calibration(filename)
20087 calwindow.destroy()
20090 if askyesno(
"Continue?",
"Continure with self calibration?", parent=calwindow):
20093 calwindow.destroy()
20096 CalFile = open(filename,
"w")
20098 CHA.mode = Mode.HI_Z
20099 CHB.mode = Mode.HI_Z
20100 devx.ctrl_transfer( 0x40, 0x50, 34, 0, 0, 0, 100)
20101 devx.ctrl_transfer( 0x40, 0x50, 39, 0, 0, 0, 100)
20103 ADsignal1 = devx.get_samples(1010)
20106 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20107 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20108 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20109 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20110 RequestVRef = askstring(
"External Reference",
"Enter External Reference Voltage", initialvalue=AD584act, parent=root)
20112 AD584act = float(RequestVRef)*1.0
20115 showinfo(
"CONNECT",
"Connect External Voltage to both CHA and CHB inputs.", parent=calwindow)
20118 CHA.mode = Mode.HI_Z
20119 CHB.mode = Mode.HI_Z
20120 ADsignal1 = devx.get_samples(1010)
20121 CHA584Raw = CHB584Raw = 0.0
20123 for index
in range(1000):
20124 CHA584Raw += ADsignal1[index+10][0][0]
20125 CHB584Raw += ADsignal1[index+10][1][0]
20127 CHA584Raw = CHA584Raw / 1000.0
20128 CHB584Raw = CHB584Raw / 1000.0
20129 VString =
"Extern A Volts " +
' {0:.4f} '.format(CHA584Raw)
20130 labelAMax.config(text = VString)
20131 VString =
"Extern B Volts " +
' {0:.4f} '.format(CHB584Raw)
20132 labelBMax.config(text = VString)
20133 Lower = AD584act - 0.3
20134 Upper = AD584act + 0.3
20135 if CHA584Raw < Lower
or CHA584Raw > Upper
or CHB584Raw < Lower
or CHB584Raw > Upper:
20136 if askyesno(
"CONNECT",
"Did not get good data from Ref V check connections!\n Abort(Y) or Try again(N)", parent=calwindow):
20137 CHA.mode = Mode.HI_Z
20138 CHB.mode = Mode.HI_Z
20141 calwindow.destroy()
20146 showinfo(
"DISCONNECT",
"Disconnect everything from CHA and CHB pins.", parent=calwindow)
20147 CHAGndRaw = CHBGndRaw = CHAI0gRaw = CHBI0gRaw = 0.0
20149 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20150 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
20151 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20152 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
20153 CHA.mode = Mode.HI_Z
20154 CHB.mode = Mode.HI_Z
20155 ADsignal1 = devx.get_samples(1010)
20157 for index
in range(1000):
20158 CHAGndRaw += ADsignal1[index+10][0][0]
20159 CHBGndRaw += ADsignal1[index+10][1][0]
20160 CHAI0gRaw += ADsignal1[index+10][0][1]
20161 CHBI0gRaw += ADsignal1[index+10][1][1]
20163 CHAGndRaw = CHAGndRaw / 1000.0
20164 CHAI0gRaw = CHAI0gRaw / 1000.0
20165 CHBGndRaw = CHBGndRaw / 1000.0
20166 CHBI0gRaw = CHBI0gRaw / 1000.0
20167 VString =
"CA gnd Volts " +
' {0:.4f} '.format(CHAGndRaw)
20168 labelA0.config(text = VString)
20169 VString =
"CB gnd Volts " +
' {0:.4f} '.format(CHBGndRaw)
20170 labelB0.config(text = VString)
20171 CHA2p5Raw = CHB2p5Raw = CHAI02p5Raw = CHBI02p5Raw = 0.0
20173 CHA.mode = Mode.HI_Z
20174 CHB.mode = Mode.HI_Z
20175 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20176 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20177 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20178 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20179 ADsignal1 = devx.get_samples(1010)
20181 for index
in range(1000):
20182 CHA2p5Raw += ADsignal1[index+10][0][0]
20183 CHB2p5Raw += ADsignal1[index+10][1][0]
20184 CHAI02p5Raw += ADsignal1[index+10][0][1]
20185 CHBI02p5Raw += ADsignal1[index+10][1][1]
20187 CHA2p5Raw = CHA2p5Raw / 1000.0
20188 CHAI02p5Raw = CHAI02p5Raw / 1000.0
20189 CHB2p5Raw = CHB2p5Raw / 1000.0
20190 CHBI02p5Raw = CHBI02p5Raw / 1000.0
20192 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20193 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20194 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20195 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20196 CHA.mode = Mode.SVMI
20198 CHB.mode = Mode.SVMI
20200 ADsignal1 = devx.get_samples(1010)
20201 CHAF0vRaw = CHBF0vRaw = CHAI0F0Raw = CHBI0F0Raw = 0.0
20203 for index
in range(1000):
20204 CHAF0vRaw += ADsignal1[index+10][0][0]
20205 CHBF0vRaw += ADsignal1[index+10][1][0]
20206 CHAI0F0Raw += ADsignal1[index+10][0][1]
20207 CHBI0F0Raw += ADsignal1[index+10][1][1]
20209 CHAF0vRaw = CHAF0vRaw / 1000.0
20210 CHAI0F0Raw = CHAI0F0Raw / 1000.0
20211 CHBF0vRaw = CHBF0vRaw / 1000.0
20212 CHBI0F0Raw = CHBI0F0Raw / 1000.0
20214 CHA.mode = Mode.SVMI
20216 CHB.mode = Mode.SVMI
20218 ADsignal1 = devx.get_samples(1010)
20219 CHAF25vRaw = CHAI0F25Raw = CHBF25vRaw = CHBI0F25Raw = 0.0
20221 for index
in range(1000):
20222 CHAF25vRaw += ADsignal1[index+10][0][0]
20223 CHBF25vRaw += ADsignal1[index+10][1][0]
20224 CHAI0F25Raw += ADsignal1[index+10][0][1]
20225 CHBI0F25Raw += ADsignal1[index+10][1][1]
20227 CHAF25vRaw = CHAF25vRaw / 1000.0
20228 CHAI0F25Raw = CHAI0F25Raw / 1000.0
20229 CHBF25vRaw = CHBF25vRaw / 1000.0
20230 CHBI0F25Raw = CHBI0F25Raw / 1000.0
20233 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20234 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
20235 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20236 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
20237 CHA.mode = Mode.SVMI
20239 CHB.mode = Mode.SVMI
20241 ADsignal1 = devx.get_samples(1010)
20242 CHASr5vRaw = CHAISr5vRaw = CHBSr5vRaw = CHBISr5vRaw = 0.0
20243 for index
in range(1000):
20244 CHASr5vRaw += ADsignal1[index+10][0][0]
20245 CHBSr5vRaw += ADsignal1[index+10][1][0]
20246 CHAISr5vRaw += ADsignal1[index+10][0][1]
20247 CHBISr5vRaw += ADsignal1[index+10][1][1]
20249 CHASr5vRaw = CHASr5vRaw / 1000.0
20250 CHAISr5vRaw = CHAISr5vRaw / 1000.0
20251 CHBSr5vRaw = CHBSr5vRaw / 1000.0
20252 CHBISr5vRaw = CHBISr5vRaw / 1000.0
20253 VString =
"CA 5V Src I " +
' {0:.4f} '.format(CHAISr5vRaw)
20254 labelAMin.config(text = VString)
20255 VString =
"CB 5V Src I " +
' {0:.4f} '.format(CHBISr5vRaw)
20256 labelBMin.config(text = VString)
20258 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20259 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20260 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20261 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20262 CHA.mode = Mode.SVMI
20263 CHA.constant(0.001)
20264 CHB.mode = Mode.SVMI
20265 CHB.constant(0.001)
20266 ADsignal1 = devx.get_samples(1010)
20267 CHASr0vRaw = CHAISr0vRaw = CHBSr0vRaw = CHBISr0vRaw = 0.0
20268 for index
in range(1000):
20269 CHASr0vRaw += ADsignal1[index+10][0][0]
20270 CHBSr0vRaw += ADsignal1[index+10][1][0]
20271 CHAISr0vRaw += ADsignal1[index+10][0][1]
20272 CHBISr0vRaw += ADsignal1[index+10][1][1]
20274 CHASr0vRaw = CHASr0vRaw / 1000.0
20275 CHAISr0vRaw = CHAISr0vRaw / 1000.0
20276 CHBSr0vRaw = CHBSr0vRaw / 1000.0
20277 CHBISr0vRaw = CHBISr0vRaw / 1000.0
20278 VString =
"CA 0V Src I " +
' {0:.4f} '.format(CHAISr0vRaw)
20279 labelAB.config(text = VString)
20280 VString =
"CB 0V Src I " +
' {0:.4f} '.format(CHBISr0vRaw)
20281 labelBA.config(text = VString)
20284 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20285 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20286 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20287 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20288 CHA.mode = Mode.SIMV
20290 CHB.mode = Mode.SIMV
20292 ADsignal1 = devx.get_samples(1010)
20293 CHAVSr0iRaw = CHAISr0iRaw = CHBVSr0iRaw = CHBISr0iRaw = 0.0
20294 for index
in range(1000):
20295 CHAVSr0iRaw += ADsignal1[index+10][0][0]
20296 CHBVSr0iRaw += ADsignal1[index+10][1][0]
20297 CHAISr0iRaw += ADsignal1[index+10][0][1]
20298 CHBISr0iRaw += ADsignal1[index+10][1][1]
20300 CHAVSr0iRaw = CHAVSr0iRaw / 1000.0
20301 CHAISr0iRaw = CHAISr0iRaw / 1000.0
20302 CHBVSr0iRaw = CHBVSr0iRaw / 1000.0
20303 CHBISr0iRaw = CHBISr0iRaw / 1000.0
20304 VString =
"CA 2.5 Src 0 I" +
' {0:.4f} '.format(CHAISr0iRaw)
20305 labelSIA0.config(text = VString)
20306 VString =
"CB 2.5 Src 0 I" +
' {0:.4f} '.format(CHBISr0iRaw)
20307 labelSIB0.config(text = VString)
20310 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20311 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20312 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20313 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20314 CHA.mode = Mode.SIMV
20315 CHA.constant(0.045)
20316 CHB.mode = Mode.SIMV
20317 CHB.constant(0.045)
20318 ADsignal1 = devx.get_samples(1010)
20319 CHAVSr100Raw = CHAISr100Raw = CHBVSr100Raw = CHBISr100Raw = 0.0
20320 for index
in range(1000):
20321 CHAVSr100Raw += ADsignal1[index+10][0][0]
20322 CHBVSr100Raw += ADsignal1[index+10][1][0]
20323 CHAISr100Raw += ADsignal1[index+10][0][1]
20324 CHBISr100Raw += ADsignal1[index+10][1][1]
20326 CHAVSr100Raw = CHAVSr100Raw / 1000.0
20327 CHAISr100Raw = CHAISr100Raw / 1000.0
20328 CHBVSr100Raw = CHBVSr100Raw / 1000.0
20329 CHBISr100Raw = CHBISr100Raw / 1000.0
20330 VString =
"CA 50 Src +45 " +
' {0:.4f} '.format(CHAVSr100Raw)
20331 labelSIA.config(text = VString)
20332 VString =
"CB 50 Src +45 " +
' {0:.4f} '.format(CHBVSr100Raw)
20333 labelSIB.config(text = VString)
20336 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
20337 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20338 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
20339 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20340 CHA.mode = Mode.SIMV
20341 CHA.constant(-0.045)
20342 CHB.mode = Mode.SIMV
20343 CHB.constant(-0.045)
20344 ADsignal1 = devx.get_samples(1010)
20345 CHAVSrN45Raw = CHAISrN45Raw = CHBVSrN45Raw = CHBISrN45Raw = 0.0
20346 for index
in range(1000):
20347 CHAVSrN45Raw += ADsignal1[index+10][0][0]
20348 CHBVSrN45Raw += ADsignal1[index+10][1][0]
20349 CHAISrN45Raw += ADsignal1[index+10][0][1]
20350 CHBISrN45Raw += ADsignal1[index+10][1][1]
20352 CHAVSrN45Raw = CHAVSrN45Raw / 1000.0
20353 CHAISrN45Raw = CHAISrN45Raw / 1000.0
20354 CHBVSrN45Raw = CHBVSrN45Raw / 1000.0
20355 CHBISrN45Raw = CHBISrN45Raw / 1000.0
20356 VString =
"CA 50 Src -45 " +
' {0:.4f} '.format(CHAVSrN45Raw)
20357 labelSIAN.config(text = VString)
20358 VString =
"CB 50 Src -45 " +
' {0:.4f} '.format(CHBVSrN45Raw)
20359 labelSIBN.config(text = VString)
20361 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
20362 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
20363 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
20364 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
20367 CHAF25V = CHAF25vRaw * ( AD584act / CHA584Raw )
20368 CHBF25V = CHBF25vRaw * ( AD584act / CHB584Raw )
20370 CHASr5v = CHASr5vRaw * ( AD584act / CHA584Raw )
20371 CHBSr5v = CHBSr5vRaw * ( AD584act / CHB584Raw )
20373 CHA2p5 = CHA2p5Raw * ( AD584act / CHA584Raw )
20375 CHB2p5 = CHB2p5Raw * ( AD584act / CHB584Raw )
20378 CHAActSrI = CHASr5v / OnBoardRes
20379 CHBActSrI = CHBSr5v / OnBoardRes
20381 CHAActSnkI = CHASr0vRaw - CHA2p5 / OnBoardRes
20382 CHBActSnkI = CHBSr0vRaw - CHB2p5 / OnBoardRes
20384 CHASr0i = CHAVSr0iRaw * ( AD584act / CHA584Raw )
20385 CHASr0iAct = CHASr0i / OnBoardRes
20386 CHASr100 = CHAVSr100Raw * ( AD584act / CHA584Raw )
20387 CHASrI100Act = (CHASr100 - CHA2p5) / OnBoardRes
20388 CHASrN45 = CHAVSrN45Raw * ( AD584act / CHA584Raw )
20389 CHASrIN45Act = (CHASrN45 - CHA2p5) / OnBoardRes
20391 CHBSr0i = CHBVSr0iRaw * ( AD584act / CHB584Raw )
20392 CHBSr0iAct = CHBSr0i / OnBoardRes
20393 CHBSr100 = CHBVSr100Raw * ( AD584act / CHB584Raw )
20394 CHBSrI100Act = (CHBSr100 - CHB2p5) / OnBoardRes
20395 CHBSrN45 = CHBVSrN45Raw * ( AD584act / CHB584Raw )
20396 CHBSrIN45Act = (CHBSrN45 - CHB2p5) / OnBoardRes
20399 CalFile.write(
'# Channel A, measure V\n')
20400 CalFile.write(
'</>\n')
20401 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAGndRaw) +
'>\n')
20402 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHA584Raw) +
'>\n')
20403 CalFile.write(
'<>\n')
20404 CalFile.write(
'\n')
20406 CalFile.write(
'# Channel A, measure I\n')
20407 CalFile.write(
'</>\n')
20408 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAI02p5Raw) +
'>\n')
20409 CalFile.write(
'<' +
'{0:.4f}'.format(CHAActSrI) +
', ' +
'{0:.4f}'.format(CHAISr5vRaw) +
'>\n')
20411 CalFile.write(
'<' +
'{0:.4f}'.format(-CHAActSrI) +
', ' +
'{0:.4f}'.format(-CHAISr5vRaw) +
'>\n')
20412 CalFile.write(
'<>\n')
20413 CalFile.write(
'\n')
20415 CalFile.write(
'# Channel A, source V\n')
20416 CalFile.write(
'</>\n')
20417 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAF0vRaw) +
'>\n')
20418 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
20419 CalFile.write(
'<>\n')
20420 CalFile.write(
'\n')
20422 CalFile.write(
'# Channel A, source I\n')
20423 CalFile.write(
'</>\n')
20424 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAISr0iRaw) +
'>\n')
20425 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHASrI100Act) +
'>\n')
20426 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHASrIN45Act) +
'>\n')
20427 CalFile.write(
'<>\n')
20428 CalFile.write(
'\n')
20430 CalFile.write(
'# Channel B, measure V\n')
20431 CalFile.write(
'</>\n')
20432 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBGndRaw) +
'>\n')
20433 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHB584Raw) +
'>\n')
20434 CalFile.write(
'<>\n')
20435 CalFile.write(
'\n')
20437 CalFile.write(
'# Channel B, measure I\n')
20438 CalFile.write(
'</>\n')
20439 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBI02p5Raw) +
'>\n')
20440 CalFile.write(
'<' +
'{0:.4f}'.format(CHBActSrI) +
', ' +
'{0:.4f}'.format(CHBISr5vRaw) +
'>\n')
20442 CalFile.write(
'<' +
'{0:.4f}'.format(-CHBActSrI) +
', ' +
'{0:.4f}'.format(-CHBISr5vRaw) +
'>\n')
20443 CalFile.write(
'<>\n')
20444 CalFile.write(
'\n')
20446 CalFile.write(
'# Channel B, source V\n')
20447 CalFile.write(
'</>\n')
20448 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBF0vRaw) +
'>\n')
20449 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
20450 CalFile.write(
'<>\n')
20451 CalFile.write(
'\n')
20453 CalFile.write(
'# Channel B source I\n')
20454 CalFile.write(
'</>\n')
20455 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBISr0iRaw) +
'>\n')
20456 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHBSrI100Act) +
'>\n')
20457 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHBSrIN45Act) +
'>\n')
20458 CalFile.write(
'<>\n')
20461 showinfo(
"Finish",
"Successfully measured cal factors!", parent=calwindow)
20462 if askyesno(
"Write cal",
"Write Cal Data to Board?", parent=calwindow):
20463 devx.write_calibration(filename)
20467 CHA.mode = Mode.HI_Z_SPLIT
20468 CHB.mode = Mode.HI_Z_SPLIT
20472 calwindow.destroy()
20475 global cal, DevID, devx
20477 devidstr = DevID[17:31]
20478 filename =
"calib" + devidstr +
"test.txt"
20479 if os.path.isfile(filename):
20480 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?"):
20483 if askyesno(
"Continue?",
"Continure with save calibration file?"):
20486 calwindow.destroy()
20489 CalFile = open(filename,
"w")
20493 CalFile.write(
'# Channel A, measure V\n')
20494 CalFile.write(
'</>\n')
20495 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[0][0]) +
'>\n')
20496 CHAgp = (5.0/cal[0][1])+cal[0][0]
20497 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20498 CalFile.write(
'<>\n')
20499 CalFile.write(
'\n')
20501 CalFile.write(
'# Channel A, measure I\n')
20502 CalFile.write(
'</>\n')
20503 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[1][0]) +
'>\n')
20504 CHAgp = (0.1/cal[0][1])+cal[1][0]
20505 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20506 CHAgn = (-0.1/cal[0][2])+cal[1][0]
20507 CalFile.write(
'<-0.1000' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20508 CalFile.write(
'<>\n')
20509 CalFile.write(
'\n')
20511 CalFile.write(
'# Channel A, source V\n')
20512 CalFile.write(
'</>\n')
20513 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[2][0]) +
'>\n')
20514 CHAgp = (5.0/cal[2][1])+cal[2][0]
20515 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20516 CalFile.write(
'<>\n')
20517 CalFile.write(
'\n')
20519 CalFile.write(
'# Channel A, source I\n')
20520 CalFile.write(
'</>\n')
20521 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[3][0]) +
'>\n')
20522 CHAgp = (0.1/cal[3][1])+cal[3][0]
20523 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20524 CHAgn = (-0.1/cal[3][2])+cal[3][0]
20525 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20526 CalFile.write(
'<>\n')
20527 CalFile.write(
'\n')
20529 CalFile.write(
'# Channel B, measure V\n')
20530 CalFile.write(
'</>\n')
20531 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[4][0]) +
'>\n')
20532 CHAgp = (5.0/cal[4][1])+cal[4][0]
20533 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20534 CalFile.write(
'<>\n')
20535 CalFile.write(
'\n')
20537 CalFile.write(
'# Channel B, measure I\n')
20538 CalFile.write(
'</>\n')
20539 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[5][0]) +
'>\n')
20540 CHAgp = (0.1/cal[5][1])+cal[5][0]
20541 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20542 CHAgn = (-0.1/cal[5][2])+cal[5][0]
20543 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20544 CalFile.write(
'<>\n')
20545 CalFile.write(
'\n')
20547 CalFile.write(
'# Channel B, source V\n')
20548 CalFile.write(
'</>\n')
20549 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[6][0]) +
'>\n')
20550 CHAgp = (5.0/cal[6][1])+cal[6][0]
20551 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20552 CalFile.write(
'<>\n')
20553 CalFile.write(
'\n')
20555 CalFile.write(
'# Channel B source I\n')
20556 CalFile.write(
'</>\n')
20557 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[7][0]) +
'>\n')
20558 CHAgp = (0.1/cal[7][1])+cal[7][0]
20559 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
20560 CHAgn = (-0.1/cal[7][2])+cal[7][0]
20561 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
20562 CalFile.write(
'<>\n')
20568 global devx, PIO_0, PIO_1, PIO_2, PIO_3, SCLKPort, SDATAPort, SLATCHPort
20570 binstr = bin(DValue)
20571 binlen = len(binstr)
20572 datastr = binstr[2:binlen]
20573 datalen = len(datastr)
20575 datastr = str.rjust(datastr , 16 ,
'0')
20576 datalen = len(datastr)
20578 devx.ctrl_transfer(0x40, 0x50, SLATCHPort.get(), 0, 0, 0, 100)
20579 while i < datalen+1:
20581 D1code = 0x50 + int(datastr[i-1])
20582 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
20583 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
20584 devx.ctrl_transfer(0x40, 0x50, SCLKPort.get(), 0, 0, 0, 100)
20585 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
20587 devx.ctrl_transfer(0x40, 0x51, SLATCHPort.get(), 0, 0, 0, 100)
20590 global FminEntry, HtMulEntry, MinigenFout, MinigenMode, etssrlab, EnableMinigenMode
20591 global Two28, mclk, EnableHSsampling, MinigenScreenStatus, ETSts, Two_X_Sample
20594 if MinigenScreenStatus.get() == 0:
20599 if EnableMinigenMode == 2:
20600 MinigenMode.set(40)
20603 FminE = float(eval(FminEntry.get()))*1000
20605 if EnableHSsampling > 0:
20606 FminEntry.delete(0,END)
20607 FminEntry.insert(0, FminE/1000)
20611 Fmin = FminE - (FminE/MulX)
20613 MinigenFout.delete(0,
"end")
20614 MinigenFout.insert(0,Fmin)
20620 global MinigenFclk, MinigenFout, MinigenMode
20621 global Two28, SCLKPort, SDATAPort, SLATCHPort
20623 DValue = 8192 + MinigenMode.get()
20626 fout = float(eval(MinigenFout.get()))
20628 MinigenFout.delete(0,
"end")
20629 MinigenFout.insert(0,100)
20631 mclk = float(eval(MinigenFclk.get()))*1000000
20633 MingenFclk.delete(0,
"end")
20634 MinigenFclk.insert(0,16)
20635 Freg = int((fout*Two28)/mclk)
20636 Foutstr = bin(Freg)
20637 Foutlen = len(Foutstr)
20638 datastr = Foutstr[2:Foutlen]
20639 datalen = len(datastr)
20641 datastr = str.rjust(datastr , 28 ,
'0')
20642 datalen = len(datastr)
20643 Fmsb =
'0b01' + datastr[0:14]
20644 Flsb =
'0b01' + datastr[14:]
20645 FValue = int(eval(Flsb))
20647 FValue = int(eval(Fmsb))
20652 global RevDate, minigenwindow, MinigenMode, MinigenScreenStatus, MinigenFclk, MinigenFout, SWRev
20653 global SCLKPort, SDATAPort, SLATCHPort
20654 global GenericSerialStatus
20655 global PIO_0, PIO_1, PIO_2, PIO_3
20657 if GenericSerialStatus.get() == 1:
20658 GenericSerialStatus.set(0)
20660 if MinigenScreenStatus.get() == 0:
20661 MinigenScreenStatus.set(1)
20662 minigenwindow = Toplevel()
20663 minigenwindow.title(
"-AD983x DDS- " + SWRev + RevDate)
20664 minigenwindow.resizable(FALSE,FALSE)
20665 minigenwindow.protocol(
"WM_DELETE_WINDOW", DestroyMinigenScreen)
20667 MinigenMode = IntVar(0)
20668 mgb1 = Radiobutton(minigenwindow, text=
"Sine", variable=MinigenMode, value=0, command=BSendMG )
20669 mgb1.grid(row=1, column=0, sticky=W)
20670 mgb2 = Radiobutton(minigenwindow, text=
"Triangle", variable=MinigenMode, value=2, command=BSendMG )
20671 mgb2.grid(row=1, column=1, columnspan=2, sticky=W)
20672 mgb3 = Radiobutton(minigenwindow, text=
"Square", variable=MinigenMode, value=40, command=BSendMG )
20673 mgb3.grid(row=2, column=0, sticky=W)
20674 mgb4 = Radiobutton(minigenwindow, text=
"Square/2", variable=MinigenMode, value=32, command=BSendMG )
20675 mgb4.grid(row=2, column=1, columnspan=2, sticky=W)
20676 f0lab = Label(minigenwindow, text=
"Mclk in MHz")
20677 f0lab.grid(row=3, column=0, columnspan=2, sticky=W)
20678 MinigenFclk = Entry(minigenwindow, width=5)
20679 MinigenFclk.grid(row=3, column=1, columnspan=2, sticky=W, padx=6)
20680 MinigenFclk.delete(0,
"end")
20681 MinigenFclk.insert(0,16)
20682 f1lab = Label(minigenwindow, text=
"Output Freq")
20683 f1lab.grid(row=4, column=0, columnspan=2, sticky=W)
20684 MinigenFout = Entry(minigenwindow, width=8, cursor=
'double_arrow')
20685 MinigenFout.bind(
'<MouseWheel>', onMiniGenScroll)
20686 MinigenFout.bind(
"<Button-4>", onMiniGenScroll)
20687 MinigenFout.bind(
"<Button-5>", onMiniGenScroll)
20688 MinigenFout.grid(row=4, column=1, columnspan=2, sticky=W)
20689 MinigenFout.delete(0,
"end")
20690 MinigenFout.insert(0,100)
20691 bsn1 = Button(minigenwindow, text=
'UpDate', style=
"W7.TButton", command=BSendMG)
20692 bsn1.grid(row=5, column=0, sticky=W, pady=4)
20693 dismissmgbutton = Button(minigenwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyMinigenScreen)
20694 dismissmgbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
20696 label3 = Label(minigenwindow,text=
"SCLK PI/O Port ")
20697 label3.grid(row=6, column=0, sticky=W)
20698 sclk1 = Radiobutton(minigenwindow, text=
"0", variable=SCLKPort, value=PIO_0)
20699 sclk1.grid(row=6, column=1, sticky=W)
20700 sclk2 = Radiobutton(minigenwindow, text=
"1", variable=SCLKPort, value=PIO_1)
20701 sclk2.grid(row=6, column=2, sticky=W)
20702 sclk3 = Radiobutton(minigenwindow, text=
"2", variable=SCLKPort, value=PIO_2)
20703 sclk3.grid(row=6, column=3, sticky=W)
20704 sclk4 = Radiobutton(minigenwindow, text=
"3", variable=SCLKPort, value=PIO_3)
20705 sclk4.grid(row=6, column=4, sticky=W)
20707 label4 = Label(minigenwindow,text=
"SData PI/O Port ")
20708 label4.grid(row=7, column=0, sticky=W)
20709 sdat1 = Radiobutton(minigenwindow, text=
"0", variable=SDATAPort, value=PIO_0)
20710 sdat1.grid(row=7, column=1, sticky=W)
20711 sdat2 = Radiobutton(minigenwindow, text=
"1", variable=SDATAPort, value=PIO_1)
20712 sdat2.grid(row=7, column=2, sticky=W)
20713 sdat3 = Radiobutton(minigenwindow, text=
"2", variable=SDATAPort, value=PIO_2)
20714 sdat3.grid(row=7, column=3, sticky=W)
20715 sdat4 = Radiobutton(minigenwindow, text=
"3", variable=SDATAPort, value=PIO_3)
20716 sdat4.grid(row=7, column=4, sticky=W)
20718 label5 = Label(minigenwindow,text=
"FSync PI/O Port ")
20719 label5.grid(row=8, column=0, sticky=W)
20720 slth1 = Radiobutton(minigenwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
20721 slth1.grid(row=8, column=1, sticky=W)
20722 slth2 = Radiobutton(minigenwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
20723 slth2.grid(row=8, column=2, sticky=W)
20724 slth3 = Radiobutton(minigenwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
20725 slth3.grid(row=8, column=3, sticky=W)
20726 slth4 = Radiobutton(minigenwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
20727 slth4.grid(row=8, column=4, sticky=W)
20732 global minigenwindow, MinigenScreenStatus
20734 MinigenScreenStatus.set(0)
20735 minigenwindow.destroy()
20738 global ETSStatus, ETSDisp
20746 global PIO_0, PIO_1, PIO_2, PIO_3
20748 binstr = bin(D1Value)
20749 binlen = len(binstr)
20750 data1str = binstr[2:binlen]
20751 datalen = len(data1str)
20753 data1str = str.rjust(data1str , 16 ,
'0')
20754 datalen = len(data1str)
20756 binstr = bin(D2Value)
20757 binlen = len(binstr)
20758 data2str = binstr[2:binlen]
20759 datalen = len(data2str)
20761 data2str = str.rjust(data2str , 16 ,
'0')
20762 datalen = len(data2str)
20769 devx.ctrl_transfer(0x40, 0x50, 0, 0, 0, 0, 100)
20770 while i < datalen+1:
20772 D1code = 0x50 + int(data1str[i-1])
20773 D2code = 0x50 + int(data2str[i-1])
20774 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
20775 devx.ctrl_transfer(0x40, D2code, PIO_2, 0, 0, 0, 100)
20776 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20777 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20778 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20780 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
20783 global DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry, REFEntry
20786 RefValue = float(eval(REFEntry.get()))
20790 D1Value = float(eval(DAC1Entry.get()))
20793 D1Code = int((D1Value/RefValue)*255)
20796 D1Code = D1Code + 0x2000
20798 D2Value = float(eval(DAC2Entry.get()))
20801 D2Code = int((D2Value/RefValue)*255)
20804 D2Code = D2Code + 0x2400
20806 D3Value = float(eval(DAC3Entry.get()))
20809 D3Code = int((D3Value/RefValue)*255)
20812 D3Code = D3Code + 0x2000
20814 D4Value = float(eval(DAC4Entry.get()))
20817 D4Code = int((D4Value/RefValue)*255)
20820 D4Code = D4Code + 0x2400
20827 global da1window, DA1ScreenStatus, DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry
20828 global REFEntry, RevDate, SWRev
20830 if DA1ScreenStatus.get() == 0:
20831 DA1ScreenStatus.set(1)
20832 da1window = Toplevel()
20833 da1window.title(
"-DA1 PMOD- " + SWRev + RevDate)
20834 da1window.resizable(FALSE,FALSE)
20835 da1window.protocol(
"WM_DELETE_WINDOW", DestroyDA1Screen)
20837 d1lab = Label(da1window, text=
"DAC A1 output")
20838 d1lab.grid(row=0, column=0, columnspan=1, sticky=W)
20839 DAC1Entry = Entry(da1window, width=5)
20840 DAC1Entry.grid(row=0, column=1, sticky=W)
20841 DAC1Entry.delete(0,
"end")
20842 DAC1Entry.insert(0,0)
20843 d2lab = Label(da1window, text=
"DAC B1 output")
20844 d2lab.grid(row=1, column=0, columnspan=1, sticky=W)
20845 DAC2Entry = Entry(da1window, width=5)
20846 DAC2Entry.grid(row=1, column=1, sticky=W)
20847 DAC2Entry.delete(0,
"end")
20848 DAC2Entry.insert(0,0)
20850 d3lab = Label(da1window, text=
"DAC A2 output")
20851 d3lab.grid(row=2, column=0, columnspan=1, sticky=W)
20852 DAC3Entry = Entry(da1window, width=5)
20853 DAC3Entry.grid(row=2, column=1, sticky=W)
20854 DAC3Entry.delete(0,
"end")
20855 DAC3Entry.insert(0,0)
20857 d4lab = Label(da1window, text=
"DAC B2 output")
20858 d4lab.grid(row=3, column=0, columnspan=1, sticky=W)
20859 DAC4Entry = Entry(da1window, width=5)
20860 DAC4Entry.grid(row=3, column=1, sticky=W)
20861 DAC4Entry.delete(0,
"end")
20862 DAC4Entry.insert(0,0)
20864 d5lab = Label(da1window, text=
"Reference V")
20865 d5lab.grid(row=4, column=0, columnspan=1, sticky=W)
20866 REFEntry = Entry(da1window, width=5)
20867 REFEntry.grid(row=4, column=1, sticky=W)
20868 REFEntry.delete(0,
"end")
20869 REFEntry.insert(0,3.3)
20871 bsn1 = Button(da1window, text=
'UpDate', style=
"W7.TButton", command=BSendDA1)
20872 bsn1.grid(row=5, column=0, sticky=W)
20873 dismissdabutton = Button(da1window, text=
"Dismiss", style=
"W8.TButton", command=DestroyDA1Screen)
20874 dismissdabutton.grid(row=5, column=1, sticky=W, pady=4)
20878 global da1window, DA1ScreenStatus
20880 DA1ScreenStatus.set(0)
20881 da1window.destroy()
20884 global devx, SingleDualPot
20885 global PIO_0, PIO_1, PIO_2, PIO_3
20887 binstr = bin(DValue)
20888 binlen = len(binstr)
20889 datastr = binstr[2:binlen]
20890 datalen = len(datastr)
20891 if SingleDualPot.get() == 0:
20893 datastr = str.rjust(datastr , 10 ,
'0')
20894 datalen = len(datastr)
20895 if SingleDualPot.get() == 1:
20897 datastr = str.rjust(datastr , 8 ,
'0')
20898 datalen = len(datastr)
20899 if SingleDualPot.get() == 2:
20901 datastr = str.rjust(datastr , 8 ,
'0')
20902 datalen = len(datastr)
20904 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20905 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
20906 while i < datalen+1:
20911 D1code = 0x50 + int(datastr[i-1])
20912 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
20913 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
20914 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
20916 devx.ctrl_transfer(0x40, 0x51, 0, 0, 0, 0, 100)
20919 global DigPot1, DigPot2, DigPot3, DigPot4, SendPot1, SendPot2, SendPot3, SendPot4
20920 global SingleDualPot
20922 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
20924 if SingleDualPot.get() == 2:
20927 DValue1 = DigPot1.get()
20928 if DValue1 > NumTaps:
20933 DValue2 = DigPot2.get()
20934 if DValue2 > NumTaps:
20939 DValue3 = DigPot3.get()
20940 if DValue3 > NumTaps:
20945 DValue4 = DigPot4.get()
20946 if DValue4 > NumTaps:
20950 if SendPot1.get() > 0:
20952 if SendPot2.get() > 0:
20954 if SendPot3.get() > 0:
20956 if SendPot4.get() > 0:
20960 global SingleDualPot, DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
20962 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
20963 DPotlabel.config(text=
"Enter number from 0 to 255")
20964 DigPot1.config(from_=0, to=255, length=256)
20965 DigPot2.config(from_=0, to=255, length=256)
20966 DigPot3.config(from_=0, to=255, length=256)
20967 DigPot4.config(from_=0, to=255, length=256)
20968 if SingleDualPot.get() == 2:
20969 DPotlabel.config(text=
"Enter number from 0 to 63")
20970 DigPot1.config(from_=0, to=63, length=64)
20971 DigPot2.config(from_=0, to=63, length=64)
20972 DigPot3.config(from_=0, to=63, length=64)
20973 DigPot4.config(from_=0, to=63, length=64)
20977 global digpotwindow, DigPotScreenStatus, DigPot1, DigPot2, DigPot3, DigPot4, RevDate
20978 global SendPot1, SendPot2, SendPot3, SendPot4, SingleDualPot, SWRev
20979 global DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
20981 if DigPotScreenStatus.get() == 0:
20982 DigPotScreenStatus.set(1)
20983 digpotwindow = Toplevel()
20984 digpotwindow.title(
"Digital Potentiometer " + SWRev + RevDate)
20985 digpotwindow.resizable(FALSE,FALSE)
20986 digpotwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigPotScreen)
20988 SendPot1 = IntVar(0)
20990 SendPot2 = IntVar(0)
20992 SendPot3 = IntVar(0)
20994 SendPot4 = IntVar(0)
20996 DPotlabel = Label(digpotwindow,text=
"Enter number from 0 to 255", style=
"A12B.TLabel")
20997 DPotlabel.grid(row=0, column=0, columnspan=3, sticky=W)
20999 SingleDualPot = IntVar(0)
21000 SingleDualPot.set(0)
21001 CompMenu = Menubutton(digpotwindow, text=
"Sel Comp.", style=
"W8.TButton")
21002 CompMenu.menu = Menu(CompMenu, tearoff = 0 )
21003 CompMenu[
"menu"] = CompMenu.menu
21004 CompMenu.menu.add_radiobutton(label=
"AD840X", variable=SingleDualPot, value=0, command=UpdatePotSlider)
21005 CompMenu.menu.add_radiobutton(label=
"AD5160", variable=SingleDualPot, value=1, command=UpdatePotSlider)
21006 CompMenu.menu.add_radiobutton(label=
"AD5203", variable=SingleDualPot, value=2, command=UpdatePotSlider)
21007 CompMenu.grid(row=1, column=0, columnspan=2, sticky=W)
21008 lab1 = Checkbutton(digpotwindow,text=
"Pot 1", variable=SendPot1)
21009 lab1.grid(row=2, column=0, sticky=W)
21010 DigPot1 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
21011 DigPot1.grid(row=3, column=0, columnspan=3, sticky=W)
21012 lab2 = Checkbutton(digpotwindow,text=
"Pot 2", variable=SendPot2)
21013 lab2.grid(row=4, column=0, sticky=W)
21014 DigPot2 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
21015 DigPot2.grid(row=5, column=0, columnspan=3, sticky=W)
21016 lab3 = Checkbutton(digpotwindow,text=
"Pot 3", variable=SendPot3)
21017 lab3.grid(row=6, column=0, sticky=W)
21018 DigPot3 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
21019 DigPot3.grid(row=7, column=0, columnspan=3, sticky=W)
21020 lab4 = Checkbutton(digpotwindow,text=
"Pot 4", variable=SendPot4)
21021 lab4.grid(row=8, column=0, sticky=W)
21022 DigPot4 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
21023 DigPot4.grid(row=9, column=0, columnspan=3, sticky=W)
21024 dismissdpbutton = Button(digpotwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigPotScreen)
21025 dismissdpbutton.grid(row=10, column=0, sticky=W, pady=4)
21028 global digpotwindow, DigPotScreenStatus
21030 DigPotScreenStatus.set(0)
21031 digpotwindow.destroy()
21034 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
21035 global NumBitsEntry, DataBitsEntry, devx, SerDirection, DValue, NumBits, AD5626SerialStatus, AD5626Entry
21037 if AD5626SerialStatus.get() == 0:
21039 DValue = int(eval(DataBitsEntry.get()))
21045 NumBits = int(NumBitsEntry.get())
21052 DValue = int(eval(AD5626Entry.get())*1000)
21055 AD5626Entry.delete(0,
"end")
21056 AD5626Entry.insert(0,
'0.000')
21059 AD5626Entry.delete(0,
"end")
21060 AD5626Entry.insert(0,DValue/1000.0)
21063 AD5626Entry.delete(0,
"end")
21064 AD5626Entry.insert(0,
'0.000')
21067 binstr = bin(DValue)
21068 binlen = len(binstr)
21069 datastr = binstr[2:binlen]
21070 datalen = len(datastr)
21071 if datalen < NumBits:
21072 datastr = str.rjust(datastr , NumBits ,
'0')
21073 datalen = len(datastr)
21074 if SLatchPhase.get() == 0:
21080 if AD5626SerialStatus.get() > 0:
21083 if SClockPhase.get() == 0:
21089 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
21090 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
21092 while i < datalen+1:
21093 if SerDirection.get() == 1:
21094 D1code = 0x50 + int(datastr[datalen-i])
21096 D1code = 0x50 + int(datastr[i-1])
21097 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
21098 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
21099 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
21101 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
21102 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
21103 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
21104 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
21108 global ad5626window, AD5626SerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
21109 global GenericSerialStatus, AD5626Entry, SerDirection, SWRev
21110 global PIO_0, PIO_1, PIO_2, PIO_3
21112 if GenericSerialStatus.get() == 1:
21113 GenericSerialStatus.set(0)
21115 if AD5626SerialStatus.get() == 0:
21116 AD5626SerialStatus.set(1)
21117 ad5626window = Toplevel()
21118 ad5626window.title(
"AD5626 Output " + SWRev + RevDate)
21119 ad5626window.resizable(FALSE,FALSE)
21120 ad5626window.protocol(
"WM_DELETE_WINDOW", DestroyAD5626Screen)
21122 SLatchPhase = IntVar(0)
21124 SClockPhase = IntVar(0)
21126 SerDirection = IntVar(0)
21127 SerDirection.set(0)
21129 label2 = Label(ad5626window,text=
"Enter Output Volts")
21130 label2.grid(row=1, column=0, columnspan=1, sticky=W)
21131 AD5626Entry = Entry(ad5626window, width=10, cursor=
'double_arrow')
21132 AD5626Entry.bind(
'<MouseWheel>', onAD5626Scroll)
21133 AD5626Entry.bind(
"<Button-4>", onAD5626Scroll)
21134 AD5626Entry.bind(
"<Button-5>", onAD5626Scroll)
21135 AD5626Entry.grid(row=1, column=1, columnspan=3, sticky=W)
21136 AD5626Entry.delete(0,
"end")
21137 AD5626Entry.insert(0,
'0.000')
21139 label3 = Label(ad5626window,text=
"SCLK PI/O Port ")
21140 label3.grid(row=2, column=0, columnspan=1, sticky=W)
21141 sclk1 = Radiobutton(ad5626window, text=
"0", variable=SCLKPort, value=PIO_0)
21142 sclk1.grid(row=2, column=1, sticky=W)
21143 sclk2 = Radiobutton(ad5626window, text=
"1", variable=SCLKPort, value=PIO_1)
21144 sclk2.grid(row=2, column=2, sticky=W)
21145 sclk3 = Radiobutton(ad5626window, text=
"2", variable=SCLKPort, value=PIO_2)
21146 sclk3.grid(row=2, column=3, sticky=W)
21147 sclk4 = Radiobutton(ad5626window, text=
"3", variable=SCLKPort, value=PIO_3)
21148 sclk4.grid(row=2, column=4, sticky=W)
21150 label4 = Label(ad5626window,text=
"SData PI/O Port ")
21151 label4.grid(row=3, column=0, columnspan=1, sticky=W)
21152 sdat1 = Radiobutton(ad5626window, text=
"0", variable=SDATAPort, value=PIO_0)
21153 sdat1.grid(row=3, column=1, sticky=W)
21154 sdat2 = Radiobutton(ad5626window, text=
"1", variable=SDATAPort, value=PIO_1)
21155 sdat2.grid(row=3, column=2, sticky=W)
21156 sdat3 = Radiobutton(ad5626window, text=
"2", variable=SDATAPort, value=PIO_2)
21157 sdat3.grid(row=3, column=3, sticky=W)
21158 sdat4 = Radiobutton(ad5626window, text=
"3", variable=SDATAPort, value=PIO_3)
21159 sdat4.grid(row=3, column=4, sticky=W)
21161 label5 = Label(ad5626window,text=
"Latch PI/O Port ")
21162 label5.grid(row=4, column=0, columnspan=1, sticky=W)
21163 slth1 = Radiobutton(ad5626window, text=
"0", variable=SLATCHPort, value=PIO_0)
21164 slth1.grid(row=4, column=1, sticky=W)
21165 slth2 = Radiobutton(ad5626window, text=
"1", variable=SLATCHPort, value=PIO_1)
21166 slth2.grid(row=4, column=2, sticky=W)
21167 slth3 = Radiobutton(ad5626window, text=
"2", variable=SLATCHPort, value=PIO_2)
21168 slth3.grid(row=4, column=3, sticky=W)
21169 slth4 = Radiobutton(ad5626window, text=
"3", variable=SLATCHPort, value=PIO_3)
21170 slth4.grid(row=4, column=4, sticky=W)
21172 bsn1 = Button(ad5626window, text=
'Send', style=
"W5.TButton", command=BSendGS)
21173 bsn1.grid(row=5, column=0, sticky=W)
21174 dismissgsbutton = Button(ad5626window, text=
"Dismiss", style=
"W8.TButton", command=DestroyAD5626Screen)
21175 dismissgsbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
21182 global ad5626window, AD5626SerialStatus
21184 AD5626SerialStatus.set(0)
21185 ad5626window.destroy()
21188 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
21189 global NumBitsEntry, DataBitsEntry, SerDirection, RevDate, SWRev
21190 global PIO_0, PIO_1, PIO_2, PIO_3
21192 if GenericSerialStatus.get() == 0:
21193 GenericSerialStatus.set(1)
21194 serialwindow = Toplevel()
21195 serialwindow.title(
"Generic Serial Output " + SWRev + RevDate)
21196 serialwindow.resizable(FALSE,FALSE)
21197 serialwindow.protocol(
"WM_DELETE_WINDOW", DestroyGenericSerialScreen)
21199 SCLKPort = IntVar(0)
21200 SCLKPort.set(PIO_2)
21201 SDATAPort = IntVar(0)
21202 SDATAPort.set(PIO_1)
21203 SLATCHPort = IntVar(0)
21204 SLATCHPort.set(PIO_0)
21205 SLatchPhase = IntVar(0)
21206 SClockPhase = IntVar(0)
21207 SerDirection = IntVar(0)
21208 label = Label(serialwindow,text=
"Enter number of Bits")
21209 label.grid(row=1, column=0, columnspan=2, sticky=W)
21210 NumBitsEntry = Entry(serialwindow, width=3)
21211 NumBitsEntry.grid(row=1, column=2, sticky=W)
21212 NumBitsEntry.delete(0,
"end")
21213 NumBitsEntry.insert(0,8)
21215 label2 = Label(serialwindow,text=
"Enter Data Word")
21216 label2.grid(row=2, column=0, columnspan=1, sticky=W)
21217 DataBitsEntry = Entry(serialwindow, width=10)
21218 DataBitsEntry.grid(row=2, column=1, columnspan=3, sticky=W)
21219 DataBitsEntry.delete(0,
"end")
21220 DataBitsEntry.insert(0,0)
21222 label3 = Label(serialwindow,text=
"SCLK PI/O Port ")
21223 label3.grid(row=3, column=0, columnspan=1, sticky=W)
21224 sclk1 = Radiobutton(serialwindow, text=
"0", variable=SCLKPort, value=PIO_0)
21225 sclk1.grid(row=3, column=1, sticky=W)
21226 sclk2 = Radiobutton(serialwindow, text=
"1", variable=SCLKPort, value=PIO_1)
21227 sclk2.grid(row=3, column=2, sticky=W)
21228 sclk3 = Radiobutton(serialwindow, text=
"2", variable=SCLKPort, value=PIO_2)
21229 sclk3.grid(row=3, column=3, sticky=W)
21230 sclk4 = Radiobutton(serialwindow, text=
"3", variable=SCLKPort, value=PIO_3)
21231 sclk4.grid(row=3, column=4, sticky=W)
21233 label4 = Label(serialwindow,text=
"SData PI/O Port ")
21234 label4.grid(row=4, column=0, columnspan=1, sticky=W)
21235 sdat1 = Radiobutton(serialwindow, text=
"0", variable=SDATAPort, value=PIO_0)
21236 sdat1.grid(row=4, column=1, sticky=W)
21237 sdat2 = Radiobutton(serialwindow, text=
"1", variable=SDATAPort, value=PIO_1)
21238 sdat2.grid(row=4, column=2, sticky=W)
21239 sdat3 = Radiobutton(serialwindow, text=
"2", variable=SDATAPort, value=PIO_2)
21240 sdat3.grid(row=4, column=3, sticky=W)
21241 sdat4 = Radiobutton(serialwindow, text=
"3", variable=SDATAPort, value=PIO_3)
21242 sdat4.grid(row=4, column=4, sticky=W)
21244 label5 = Label(serialwindow,text=
"Latch PI/O Port ")
21245 label5.grid(row=5, column=0, columnspan=1, sticky=W)
21246 slth1 = Radiobutton(serialwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
21247 slth1.grid(row=5, column=1, sticky=W)
21248 slth2 = Radiobutton(serialwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
21249 slth2.grid(row=5, column=2, sticky=W)
21250 slth3 = Radiobutton(serialwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
21251 slth3.grid(row=5, column=3, sticky=W)
21252 slth4 = Radiobutton(serialwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
21253 slth4.grid(row=5, column=4, sticky=W)
21255 label6 = Label(serialwindow,text=
"Latch Phase ")
21256 label6.grid(row=6, column=0, columnspan=1, sticky=W)
21257 sph1 = Radiobutton(serialwindow, text=
"0", variable=SLatchPhase, value=0)
21258 sph1.grid(row=6, column=1, sticky=W)
21259 sph2 = Radiobutton(serialwindow, text=
"1", variable=SLatchPhase, value=1)
21260 sph2.grid(row=6, column=2, sticky=W)
21262 label7 = Label(serialwindow,text=
"Clock Phase ")
21263 label7.grid(row=7, column=0, columnspan=1, sticky=W)
21264 sph7 = Radiobutton(serialwindow, text=
"0", variable=SClockPhase, value=0)
21265 sph7.grid(row=7, column=1, sticky=W)
21266 sph8 = Radiobutton(serialwindow, text=
"1", variable=SClockPhase, value=1)
21267 sph8.grid(row=7, column=2, sticky=W)
21269 sdir1 = Radiobutton(serialwindow, text=
"LSB First", variable=SerDirection, value=0 )
21270 sdir1.grid(row=8, column=0, sticky=W)
21271 sdir2 = Radiobutton(serialwindow, text=
"MSB First", variable=SerDirection, value=1 )
21272 sdir2.grid(row=8, column=1, columnspan=2, sticky=W)
21274 bsn1 = Button(serialwindow, text=
'Send', style=
"W5.TButton", command=BSendGS)
21275 bsn1.grid(row=9, column=0, sticky=W)
21276 dismissgsbutton = Button(serialwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyGenericSerialScreen)
21277 dismissgsbutton.grid(row=9, column=1, columnspan=2, sticky=W, pady=4)
21280 global serialwindow, GenericSerialStatus
21282 GenericSerialStatus.set(0)
21283 serialwindow.destroy()
21287 global digfltwindow, DigFiltStatus, RevDate, SWRev, DeBugMode
21288 global DigFiltA, DigFiltB, DifFiltALength, DifFiltBLength, DifFiltAFile, DifFiltBFile
21289 global DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
21290 global BCASkewEntry, BCBSkewEntry, DigDeSkewA, DigDeSkewB
21291 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, AWGFiltAFile
21292 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength, AWGFiltBFile
21294 if DigFiltStatus.get() == 0:
21295 DigFiltStatus.set(1)
21296 digfltwindow = Toplevel()
21297 digfltwindow.title(
"Digital Filter " + SWRev + RevDate)
21298 digfltwindow.resizable(FALSE,FALSE)
21299 digfltwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigFiltScreen)
21301 scriptbutton = Button(digfltwindow, text=
"Run Script", style=
"W11.TButton", command=RunScript)
21302 scriptbutton.grid(row=0, column=0, columnspan=1, sticky=W)
21303 dismissdfbutton = Button(digfltwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigFiltScreen)
21304 dismissdfbutton.grid(row=0, column=1, columnspan=1, sticky=W)
21305 frame2 = LabelFrame(digfltwindow, text=
"CH A Filter", style=
"A10R1.TLabelframe")
21306 frame3 = LabelFrame(digfltwindow, text=
"CH B Filter", style=
"A10R2.TLabelframe")
21309 frame2.grid(row=1, column=0, sticky=W)
21310 frame3.grid(row=1, column=1, sticky=W)
21311 frame4 = LabelFrame(digfltwindow, text=
"AWG A Filter", style=
"A10R1.TLabelframe")
21312 frame5 = LabelFrame(digfltwindow, text=
"AWG B Filter", style=
"A10R2.TLabelframe")
21313 frame4.grid(row=2, column=0, sticky=W)
21314 frame5.grid(row=2, column=1, sticky=W)
21316 digfilta = Frame( frame2 )
21317 digfilta.pack(side=LEFT)
21320 lab1 = Checkbutton(digfilta,text=
"Filter CH A", variable=DigFiltA)
21321 lab1.grid(row=0, column=0, columnspan=2, sticky=W)
21322 lab3 = Checkbutton(digfilta,text=
"Box Car", variable=DigFiltABoxCar, command=BuildBoxCarA)
21323 lab3.grid(row=1, column=0, sticky=W)
21324 BCALenEntry = Entry(digfilta, width=3, cursor=
'double_arrow')
21325 BCALenEntry.bind(
"<Return>", onRetDigFiltA)
21326 BCALenEntry.bind(
'<MouseWheel>', onDigFiltAScroll)
21327 BCALenEntry.bind(
"<Button-4>", onDigFiltAScroll)
21328 BCALenEntry.bind(
"<Button-5>", onDigFiltAScroll)
21330 BCALenEntry.grid(row=1, column=1, sticky=W)
21331 BCALenEntry.delete(0,
"end")
21332 BCALenEntry.insert(0,2)
21333 bcalab = Label(digfilta, text=
"Length")
21334 bcalab.grid(row=1, column=2, sticky=W)
21335 DifFiltALength = Label(digfilta, text=
"Length = 0 ")
21336 DifFiltALength.grid(row=2, column=0, sticky=W)
21337 DifFiltAFile = Label(digfilta, text=
"File Name, none ")
21338 DifFiltAFile.grid(row=3, column=0, columnspan=3, sticky=W)
21339 cald = Button(digfilta, text=
'Load CH A Filter Coef', command=BLoadDFiltA)
21340 cald.grid(row=4, column=0, columnspan=3, sticky=W)
21341 camath = Button(digfilta, text=
'CH A Filter formula', command=BDFiltAMath)
21342 camath.grid(row=5, column=0, columnspan=3, sticky=W)
21345 lab5 = Checkbutton(digfilta, text=
"DeSkew A", variable=DigDeSkewA)
21346 lab5.grid(row=6, column=0, sticky=W)
21347 BCASkewEntry = Entry(digfilta, width=3, cursor=
'double_arrow')
21348 BCASkewEntry.bind(
'<MouseWheel>', onTextScroll)
21349 BCASkewEntry.bind(
"<Button-4>", onTextScroll)
21350 BCASkewEntry.bind(
"<Button-5>", onTextScroll)
21351 BCASkewEntry.grid(row=6, column=1, sticky=W)
21352 BCASkewEntry.delete(0,
"end")
21353 BCASkewEntry.insert(0,0)
21354 bcasklab = Label(digfilta, text=
"# Samples")
21355 bcasklab.grid(row=6, column=2, sticky=W)
21360 digfiltb = Frame( frame3 )
21361 digfiltb.pack(side=RIGHT)
21362 lab2 = Checkbutton(digfiltb,text=
"Filter CH B", variable=DigFiltB)
21363 lab2.grid(row=0, column=0, columnspan=2, sticky=W)
21364 lab4 = Checkbutton(digfiltb,text=
"Box Car", variable=DigFiltBBoxCar, command=BuildBoxCarB)
21365 lab4.grid(row=1, column=0, sticky=W)
21366 BCBLenEntry = Entry(digfiltb, width=3, cursor=
'double_arrow')
21367 BCBLenEntry.bind(
"<Return>", onRetDigFiltB)
21368 BCBLenEntry.bind(
'<MouseWheel>', onDigFiltBScroll)
21369 BCBLenEntry.bind(
"<Button-4>", onDigFiltBScroll)
21370 BCBLenEntry.bind(
"<Button-5>", onDigFiltBScroll)
21372 BCBLenEntry.grid(row=1, column=1, sticky=W)
21373 BCBLenEntry.delete(0,
"end")
21374 BCBLenEntry.insert(0,2)
21375 bcblab = Label(digfiltb, text=
"Length")
21376 bcblab.grid(row=1, column=2, sticky=W)
21377 DifFiltBLength = Label(digfiltb,text=
"Length = 0 ")
21378 DifFiltBLength.grid(row=2, column=0, sticky=W)
21379 DifFiltBFile = Label(digfiltb,text=
"File Name, none ")
21380 DifFiltBFile.grid(row=3, column=0, columnspan=3, sticky=W)
21381 cbld = Button(digfiltb, text=
'Load CH B Filter Coef', command=BLoadDFiltB)
21382 cbld.grid(row=4, column=0, columnspan=3, sticky=W)
21383 cbmath = Button(digfiltb, text=
'CH B Filter formula', command=BDFiltBMath)
21384 cbmath.grid(row=5, column=0, columnspan=3, sticky=W)
21386 lab6 = Checkbutton(digfiltb,text=
"DeSkew B", variable=DigDeSkewB)
21387 lab6.grid(row=6, column=0, sticky=W)
21388 BCBSkewEntry = Entry(digfiltb, width=3, cursor=
'double_arrow')
21389 BCBSkewEntry.bind(
'<MouseWheel>', onTextScroll)
21390 BCBSkewEntry.bind(
"<Button-4>", onTextScroll)
21391 BCBSkewEntry.bind(
"<Button-5>", onTextScroll)
21392 BCBSkewEntry.grid(row=6, column=1, sticky=W)
21393 BCBSkewEntry.delete(0,
"end")
21394 BCBSkewEntry.insert(0,0)
21395 bcbsklab = Label(digfiltb, text=
"# Samples")
21396 bcbsklab.grid(row=6, column=2, sticky=W)
21398 awgfilta = Frame( frame4 )
21399 awgfilta.pack(side=LEFT)
21400 lab7 = Checkbutton(awgfilta,text=
"Filter AWG A", variable=AWGFiltA, command=ReMakeAWGwaves)
21401 lab7.grid(row=0, column=0, columnspan=2, sticky=W)
21402 lab8 = Checkbutton(awgfilta,text=
"Box Car", variable=AWGFiltABoxCar, command=BuildAWGBoxCarA)
21403 lab8.grid(row=1, column=0, sticky=W)
21404 AWGALenEntry = Entry(awgfilta, width=3, cursor=
'double_arrow')
21405 AWGALenEntry.bind(
"<Return>", onRetAWGFiltA)
21406 AWGALenEntry.bind(
'<MouseWheel>', onAWGFiltAScroll)
21407 AWGALenEntry.bind(
"<Button-4>", onAWGFiltAScroll)
21408 AWGALenEntry.bind(
"<Button-5>", onAWGFiltAScroll)
21410 AWGALenEntry.grid(row=1, column=1, sticky=W)
21411 AWGALenEntry.delete(0,
"end")
21412 AWGALenEntry.insert(0,2)
21413 awgalab = Label(awgfilta, text=
"Length")
21414 awgalab.grid(row=1, column=2, sticky=W)
21415 AWGFiltALength = Label(awgfilta, text=
"Length = 0 ")
21416 AWGFiltALength.grid(row=2, column=0, sticky=W)
21417 AWGFiltAFile = Label(awgfilta, text=
"File Name, none ")
21418 AWGFiltAFile.grid(row=3, column=0, columnspan=3, sticky=W)
21419 awgaload = Button(awgfilta, text=
'Load AWG A Filter Coef', command=BLoadAWGFiltA)
21420 awgaload.grid(row=4, column=0, columnspan=3, sticky=W)
21421 awgamath = Button(awgfilta, text=
'AWG A Filter formula', command=BAWGFiltAMath)
21422 awgamath.grid(row=5, column=0, columnspan=3, sticky=W)
21425 awgfiltb = Frame( frame5 )
21426 awgfiltb.pack(side=RIGHT)
21427 lab9 = Checkbutton(awgfiltb,text=
"Filter AWG B", variable=AWGFiltB, command=ReMakeAWGwaves)
21428 lab9.grid(row=0, column=0, columnspan=2, sticky=W)
21429 lab10 = Checkbutton(awgfiltb,text=
"Box Car", variable=AWGFiltBBoxCar, command=BuildAWGBoxCarB)
21430 lab10.grid(row=1, column=0, sticky=W)
21431 AWGBLenEntry = Entry(awgfiltb, width=3, cursor=
'double_arrow')
21432 AWGBLenEntry.bind(
"<Return>", onRetAWGFiltB)
21433 AWGBLenEntry.bind(
'<MouseWheel>', onAWGFiltBScroll)
21434 AWGBLenEntry.bind(
"<Button-4>", onAWGFiltBScroll)
21435 AWGBLenEntry.bind(
"<Button-5>", onAWGFiltBScroll)
21437 AWGBLenEntry.grid(row=1, column=1, sticky=W)
21438 AWGBLenEntry.delete(0,
"end")
21439 AWGBLenEntry.insert(0,2)
21440 awgblab = Label(awgfiltb, text=
"Length")
21441 awgblab.grid(row=1, column=2, sticky=W)
21442 AWGFiltBLength = Label(awgfiltb, text=
"Length = 0 ")
21443 AWGFiltBLength.grid(row=2, column=0, sticky=W)
21444 AWGFiltBFile = Label(awgfiltb, text=
"File Name, none ")
21445 AWGFiltBFile.grid(row=3, column=0, columnspan=3, sticky=W)
21446 awgbload = Button(awgfiltb, text=
'Load AWG B Filter Coef', command=BLoadAWGFiltB)
21447 awgbload.grid(row=4, column=0, columnspan=3, sticky=W)
21448 awgbmath = Button(awgfiltb, text=
'AWG B Filter formula', command=BAWGFiltBMath)
21449 awgbmath.grid(row=5, column=0, columnspan=3, sticky=W)
21459 global BCALenEntry, DFiltACoef, DigFiltABoxCar, DifFiltALength
21461 if DigFiltABoxCar.get() == 0:
21464 FLength = int(BCALenEntry.get())
21470 for n
in range(FLength):
21471 DFiltACoef.append(float(1.0/FLength))
21473 DFiltACoef = numpy.array(DFiltACoef)
21474 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21484 global BCBLenEntry, DFiltBCoef, DigFiltBBoxCar, DifFiltBLength
21486 if DigFiltBBoxCar.get() == 0:
21489 FLength = int(BCBLenEntry.get())
21495 for n
in range(FLength):
21496 DFiltBCoef.append(float(1.0/FLength))
21498 DFiltBCoef = numpy.array(DFiltBCoef)
21499 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21502 global digfltwindow, DigFiltStatus
21504 DigFiltStatus.set(0)
21505 digfltwindow.destroy()
21508 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile
21511 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21513 CSVFile = open(filename)
21514 csv_f = csv.reader(CSVFile)
21516 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21522 DFiltACoef.append(float(row[0]))
21524 print(
'skipping non-numeric row')
21525 DFiltACoef = numpy.array(DFiltACoef)
21526 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21527 DifFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
21531 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile, DigFilterAString
21533 TempString = DigFilterAString
21534 DigFilterAString = askstring(
"CH A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=DigFilterAString, parent=digfltwindow)
21535 if (DigFilterAString ==
None):
21536 DigFilterAString = TempString
21538 DFiltACoef = eval(DigFilterAString)
21539 DFiltACoef = numpy.array(DFiltACoef)
21540 coefsum = numpy.sum(DFiltACoef)
21541 DFiltACoef = DFiltACoef / coefsum
21542 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
21543 DifFiltAFile.config(text =
"Using Filter A formula" )
21546 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile
21549 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21551 CSVFile = open(filename)
21552 csv_f = csv.reader(CSVFile)
21554 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21560 DFiltBCoef.append(float(row[0]))
21562 print(
'skipping non-numeric row')
21563 DFiltBCoef = numpy.array(DFiltBCoef)
21564 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21565 DifFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
21569 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile, DigFilterBString
21571 TempString = DigFilterBString
21572 DigFilterBString = askstring(
"CH B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=DigFilterBString, parent=digfltwindow)
21573 if (DigFilterBString ==
None):
21574 DigFilterBString = TempString
21576 DFiltBCoef = eval(DigFilterBString)
21577 DFiltBCoef = numpy.array(DFiltBCoef)
21578 coefsum = numpy.sum(DFiltBCoef)
21579 DFiltBCoef = DFiltBCoef / coefsum
21580 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
21581 DifFiltBFile.config(text =
"Using Filter B formula" )
21591 global AWGALenEntry, AWGFiltACoef, AWGFiltABoxCar, AWGFiltALength
21593 if AWGFiltABoxCar.get() == 0:
21596 FLength = int(AWGALenEntry.get())
21602 for n
in range(FLength):
21603 AWGFiltACoef.append(float(1.0/FLength))
21605 AWGFiltACoef = numpy.array(AWGFiltACoef)
21606 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21617 global AWGBLenEntry, AWGFiltBCoef, AWGFiltBBoxCar, AWGFiltBLength
21619 if AWGFiltBBoxCar.get() == 0:
21622 FLength = int(AWGBLenEntry.get())
21628 for n
in range(FLength):
21629 AWGFiltBCoef.append(float(1.0/FLength))
21631 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21632 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21636 global AWGFiltACoef, digfltwindow, AWGFiltALength, AWGFiltAFile
21639 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21641 CSVFile = open(filename)
21642 csv_f = csv.reader(CSVFile)
21644 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21650 AWGFiltACoef.append(float(row[0]))
21652 print(
'skipping non-numeric row')
21653 AWGFiltACoef = numpy.array(AWGFiltACoef)
21654 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21655 AWGFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
21660 global AWGFiltACoef, digfltwindow, AWGFiltALength, AWGFiltAFile, AWGFilterAString
21662 TempString = AWGFilterAString
21663 AWGFilterAString = askstring(
"AWG A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=AWGFilterAString, parent=digfltwindow)
21664 if (AWGFilterAString ==
None):
21665 AWGFilterAString = TempString
21667 AWGFiltACoef = eval(AWGFilterAString)
21668 AWGFiltACoef = numpy.array(AWGFiltACoef)
21669 coefsum = numpy.sum(AWGFiltACoef)
21670 AWGFiltACoef = AWGFiltACoef / coefsum
21671 AWGFiltALength.config(text =
"Length = " + str(int(len(AWGFiltACoef))))
21672 AWGFiltAFile.config(text =
"AWG A Filter formula" )
21677 global AWGFiltBCoef, digfltwindow, AWGFiltbLength, AWGFiltBFile
21680 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
21682 CSVFile = open(filename)
21683 csv_f = csv.reader(CSVFile)
21685 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
21691 AWGFiltBCoef.append(float(row[0]))
21693 print(
'skipping non-numeric row')
21694 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21695 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21696 AWGFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
21701 global AWGFiltBCoef, digfltwindow, AWGFiltBLength, AWGFiltBFile, AWGFilterBString
21703 TempString = AWGFilterBString
21704 AWGFilterBString = askstring(
"AWG B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=AWGFilterBString, parent=digfltwindow)
21705 if (AWGFilterBString ==
None):
21706 AWGFilterBString = TempString
21708 AWGFiltBCoef = eval(AWGFilterBString)
21709 AWGFiltBCoef = numpy.array(AWGFiltBCoef)
21710 coefsum = numpy.sum(AWGFiltBCoef)
21711 AWGFiltBCoef = AWGFiltBCoef / coefsum
21712 AWGFiltBLength.config(text =
"Length = " + str(int(len(AWGFiltBCoef))))
21713 AWGFiltBFile.config(text =
"AWG B Filter formula" )
21721 osr = int(Fsample/Freject)
21724 sinc1 = numpy.ones(osr)
21727 sinc2 = numpy.convolve(sinc1, sinc1)
21728 sinc3 = numpy.convolve(sinc2, sinc1)
21729 sinc4 = numpy.convolve(sinc2, sinc2)
21730 fosr = float(Fsample/Freject)
21754 for (x,y)
in zip(xs, ys):
21755 S_x2_y += x * x * y
21756 S_y_lny += y * numpy.log(y)
21758 S_x_y_lny += x * y * numpy.log(y)
21761 a = (S_x2_y * S_y_lny - S_x_y * S_x_y_lny) / (S_y * S_x2_y - S_x_y * S_x_y)
21762 b = (S_y * S_x_y_lny - S_x_y * S_y_lny) / (S_y * S_x2_y - S_x_y * S_x_y)
21763 return (numpy.exp(a), b)
21766 global commandwindow, CommandStatus, ExecString, LastCommand, RevDate, SWRev
21768 if CommandStatus.get() == 0:
21769 CommandStatus.set(1)
21770 commandwindow = Toplevel()
21771 commandwindow.title(
"Command Line " + SWRev + RevDate)
21772 commandwindow.resizable(FALSE,FALSE)
21773 commandwindow.protocol(
"WM_DELETE_WINDOW", DestroyCommandScreen)
21774 toplab = Label(commandwindow,text=
"Command Line Interface ", style=
"A12B.TLabel")
21775 toplab.grid(row=0, column=0, columnspan=4, sticky=W)
21776 cl1 = Label(commandwindow,text=
"Last command:")
21777 cl1.grid(row=1, column=0, sticky=W)
21778 LastCommand = Label(commandwindow,text=
" ")
21779 LastCommand.grid(row=2, column=0, columnspan=4, sticky=W)
21780 ExecString = Entry(commandwindow, width=40)
21781 ExecString.bind(
"<Return>", RExecuteFromString)
21782 ExecString.grid(row=3, column=0, columnspan=4, sticky=W)
21783 ExecString.delete(0,
"end")
21784 ExecString.insert(0,
"")
21785 executeclbutton = Button(commandwindow, text=
"Execute", style=
"W8.TButton", command=BExecuteFromString)
21786 executeclbutton.grid(row=4, column=0, sticky=W, pady=8)
21787 scriptbutton = Button(commandwindow, text=
"Run Script", style=
"W10.TButton", command=RunScript)
21788 scriptbutton.grid(row=4, column=1, sticky=W, pady=8)
21790 dismissclbutton = Button(commandwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyCommandScreen)
21791 dismissclbutton.grid(row=4, column=2, sticky=W, pady=7)
21794 global commandwindow, CommandStatus
21796 CommandStatus.set(0)
21797 commandwindow.destroy()
21804 global ExecString, LastCommand
21805 global VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
21806 global VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAwaveform, AWGBwaveform
21807 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
21808 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
21809 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
21810 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
21811 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
21812 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
21813 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
21814 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
21815 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
21816 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
21817 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
21818 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
21819 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
21820 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
21821 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
21822 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
21823 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
21824 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
21825 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
21826 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
21827 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
21828 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
21829 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
21830 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
21831 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
21832 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
21833 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
21834 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow, ChopMuxMode, ChopTrig, DualMuxMode
21835 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
21836 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
21837 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
21838 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
21839 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
21840 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
21841 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
21842 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
21843 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
21844 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
21845 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
21846 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
21847 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
21848 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
21849 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
21850 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
21851 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
21852 global phawindow, PhAca, PhAScreenStatus, PhADisp
21853 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
21854 global VScale, IScale, RefphEntry, SMPfft, BoardStatus, boardwindow, BrdSel
21855 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn, RollBt, Roll_Mode
21856 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D, ScreenWidth, ScreenHeight
21857 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
21858 global AWGANoiseEntry, AWGBNoiseEntry, AWGAsbnoise, AWGBsbnoise
21859 global AWGFiltA, AWGALenEntry, AWGFiltABoxCar, AWGFiltALength, digfltwindow
21860 global AWGFiltB, AWGBLenEntry, AWGFiltBBoxCar, AWGFiltBLength
21861 global DFiltACoef, DFiltBCoef, AWGACoef, AWGBCoef
21864 exec( ExecString.get(), globals(), globals())
21866 LastCommand.config(text = ExecString.get() )
21868 LastCommand.config(text =
"Syntax Error Encountered" )
21872 global ca, GRW, XOL, GRH, Y0T, CANVASwidth, CANVASheight, FontSize
21875 CANVASwidth = event.width - 4
21876 CANVASheight = event.height - 4
21877 GRW = CANVASwidth - (2 * X0L)
21878 GRH = CANVASheight - (Y0T + (FontSize * 7))
21882 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
21883 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
21884 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
21885 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
21886 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
21887 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
21889 ValueText =
' {0:.4f} '.format(eval(ChaMeasString1))
21890 ChaValue1.config(text = ValueText)
21891 ValueText =
' {0:.4f} '.format(eval(ChaMeasString2))
21892 ChaValue2.config(text = ValueText)
21893 ValueText =
' {0:.4f} '.format(eval(ChaMeasString3))
21894 ChaValue3.config(text = ValueText)
21895 ValueText =
' {0:.4f} '.format(eval(ChaMeasString4))
21896 ChaValue4.config(text = ValueText)
21897 ValueText =
' {0:.4f} '.format(eval(ChaMeasString5))
21898 ChaValue5.config(text = ValueText)
21899 ValueText =
' {0:.4f} '.format(eval(ChaMeasString6))
21900 ChaValue6.config(text = ValueText)
21901 ValueText =
' {0:.4f} '.format(eval(ChbMeasString1))
21902 ChbValue1.config(text = ValueText)
21903 ValueText =
' {0:.4f} '.format(eval(ChbMeasString2))
21904 ChbValue2.config(text = ValueText)
21905 ValueText =
' {0:.4f} '.format(eval(ChbMeasString3))
21906 ChbValue3.config(text = ValueText)
21907 ValueText =
' {0:.4f} '.format(eval(ChbMeasString4))
21908 ChbValue4.config(text = ValueText)
21909 ValueText =
' {0:.4f} '.format(eval(ChbMeasString5))
21910 ChbValue5.config(text = ValueText)
21911 ValueText =
' {0:.4f} '.format(eval(ChbMeasString6))
21912 ChbValue6.config(text = ValueText)
21915 global measurewindow, MeasureStatus, RevDate, SWRev
21916 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
21917 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
21918 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
21919 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
21920 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
21921 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
21923 if MeasureStatus.get() == 0:
21924 MeasureStatus.set(1)
21925 measurewindow = Toplevel()
21926 measurewindow.title(
"Measurements " + SWRev + RevDate)
21927 measurewindow.resizable(FALSE,FALSE)
21928 measurewindow.protocol(
"WM_DELETE_WINDOW", DestroyMeasureScreen)
21929 toplab = Label(measurewindow,text=
"Measurements ", style=
"A12B.TLabel")
21930 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
21931 ChaLab1 = Label(measurewindow,text=ChaLableSrring1, style=
"A10B.TLabel")
21932 ChaLab1.grid(row=1, column=0, columnspan=1, sticky=W)
21933 ChaValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21934 ChaValue1.grid(row=1, column=1, columnspan=1, sticky=W)
21935 ChaLab2 = Label(measurewindow,text=ChaLableSrring2, style=
"A10B.TLabel")
21936 ChaLab2.grid(row=1, column=2, columnspan=1, sticky=W)
21937 ChaValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21938 ChaValue2.grid(row=1, column=3, columnspan=1, sticky=W)
21939 ChaLab3 = Label(measurewindow,text=ChaLableSrring3, style=
"A10B.TLabel")
21940 ChaLab3.grid(row=2, column=0, columnspan=1, sticky=W)
21941 ChaValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21942 ChaValue3.grid(row=2, column=1, columnspan=1, sticky=W)
21943 ChaLab4 = Label(measurewindow,text=ChaLableSrring4, style=
"A10B.TLabel")
21944 ChaLab4.grid(row=2, column=2, columnspan=1, sticky=W)
21945 ChaValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21946 ChaValue4.grid(row=2, column=3, columnspan=1, sticky=W)
21947 ChaLab5 = Label(measurewindow,text=ChaLableSrring5, style=
"A10B.TLabel")
21948 ChaLab5.grid(row=3, column=0, columnspan=1, sticky=W)
21949 ChaValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21950 ChaValue5.grid(row=3, column=1, columnspan=1, sticky=W)
21951 ChaLab6 = Label(measurewindow,text=ChaLableSrring6, style=
"A10B.TLabel")
21952 ChaLab6.grid(row=3, column=2, columnspan=1, sticky=W)
21953 ChaValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21954 ChaValue6.grid(row=3, column=3, columnspan=1, sticky=W)
21956 ChbLab1 = Label(measurewindow,text=ChbLableSrring1, style=
"A10B.TLabel")
21957 ChbLab1.grid(row=4, column=0, columnspan=1, sticky=W)
21958 ChbValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21959 ChbValue1.grid(row=4, column=1, columnspan=1, sticky=W)
21960 ChbLab2 = Label(measurewindow,text=ChbLableSrring2, style=
"A10B.TLabel")
21961 ChbLab2.grid(row=4, column=2, columnspan=1, sticky=W)
21962 ChbValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21963 ChbValue2.grid(row=4, column=3, columnspan=1, sticky=W)
21964 ChbLab3 = Label(measurewindow,text=ChbLableSrring3, style=
"A10B.TLabel")
21965 ChbLab3.grid(row=5, column=0, columnspan=1, sticky=W)
21966 ChbValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21967 ChbValue3.grid(row=5, column=1, columnspan=1, sticky=W)
21968 ChbLab4 = Label(measurewindow,text=ChbLableSrring4, style=
"A10B.TLabel")
21969 ChbLab4.grid(row=5, column=2, columnspan=1, sticky=W)
21970 ChbValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21971 ChbValue4.grid(row=5, column=3, columnspan=1, sticky=W)
21972 ChbLab5 = Label(measurewindow,text=ChbLableSrring5, style=
"A10B.TLabel")
21973 ChbLab5.grid(row=6, column=0, columnspan=1, sticky=W)
21974 ChbValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21975 ChbValue5.grid(row=6, column=1, columnspan=1, sticky=W)
21976 ChbLab6 = Label(measurewindow,text=ChbLableSrring6, style=
"A10B.TLabel")
21977 ChbLab6.grid(row=6, column=2, columnspan=1, sticky=W)
21978 ChbValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
21979 ChbValue6.grid(row=6, column=3, columnspan=1, sticky=W)
21982 global measurewindow, MeasureStatus
21984 MeasureStatus.set(0)
21985 measurewindow.destroy()
21988 global boardwindow, BoardStatus, session, devx, dev0, dev1, dev2, MultipleBoards
21989 global RevDate, BrdSel, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
21991 if len(session.devices) > 1
and MultipleBoards.get() > 0:
21992 if BoardStatus.get() == 0:
21994 boardwindow = Toplevel()
21995 boardwindow.title(
"Select Board " + RevDate)
21996 boardwindow.resizable(FALSE,FALSE)
21997 boardwindow.protocol(
"WM_DELETE_WINDOW", DestroyBoardScreen)
21998 toplab = Label(boardwindow,text=
"- Select ALM1000 -", style=
"A12B.TLabel")
21999 toplab.pack(side=TOP)
22000 for idx, devx
in enumerate(session.devices):
22001 BrdText =
"Board # " + str(idx)
22003 devx.set_led(0b010)
22004 FWRevOne = float(devx.fwver)
22005 HWRevOne = devx.hwver
22007 brd = Radiobutton(boardwindow, text=BrdText, style=
"Run.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
22009 devx.set_led(0b100)
22010 FWRevTwo = float(devx.fwver)
22011 HWRevTwo = devx.hwver
22013 brd = Radiobutton(boardwindow, text=BrdText, style=
"Stop.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
22015 devx.set_led(0b001)
22016 FWRevThree = float(devx.fwver)
22017 HWRevThree = devx.hwver
22019 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
22021 dev3 = session.devices[3]
22022 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
22025 devx = session.devices[0]
22027 devx.set_led(0b010)
22029 FWRevOne = float(devx.fwver)
22030 HWRevOne = devx.hwver
22032 FWRevOne =
"Before 2.06"
22034 dev0 = session.devices[0]
22037 global boardwindow, BoardStatus
22040 boardwindow.destroy()
22043 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples, AWGSAMPLErate
22044 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree, SAMPLErate, MultipleBoards
22046 if DevID ==
"No Device" or DevID ==
"m1k":
22048 session = Session(ignore_dataflow=
True, sample_rate=SAMPLErate, queue_size=MaxSamples)
22051 if not session.devices:
22052 print(
'No Device plugged IN!')
22053 DevID =
"No Device"
22056 bcon.configure(text=
"Recon", style=
"RConn.TButton")
22058 session.configure(sample_rate=SAMPLErate)
22062 bcon.configure(text=
"Conn", style=
"GConn.TButton")
22063 devx.set_adc_mux(0)
22064 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
22065 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
22073 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, RUNstatus, FWRevOne, HWRevOne
22074 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7, cal, SAMPLErate, MaxSamples
22075 global IgnoreFirmwareCheck, SDATAPort, SCLKPort, SLATCHPort
22077 if RUNstatus.get() == 1:
22081 if BrdSel.get() == 0:
22083 session.remove(dev1)
22084 print(
"Removing dev1")
22086 print(
"Skipping dev1")
22088 session.remove(dev2)
22089 print(
"Removing dev2")
22091 print(
"Skipping dev2")
22095 if BrdSel.get() == 1:
22097 session.remove(dev0)
22098 print(
"Removing dev0")
22100 print(
"Skipping dev0")
22102 session.remove(dev2)
22103 print(
"Removing dev2")
22105 print(
"Skipping dev2")
22109 DevID = devx.serial
22111 FWRevOne = float(devx.fwver)
22112 HWRevOne = str(devx.hwver)
22113 print( FWRevOne, HWRevOne)
22116 if IgnoreFirmwareCheck == 0:
22117 if FWRevOne < 2.17:
22118 showwarning(
"WARNING",
"This ALICE version Requires Firmware version > 2.16")
22120 cal = devx.calibration
22121 CHA = devx.channels[
'A']
22122 CHA.mode = Mode.HI_Z_SPLIT
22123 CHB = devx.channels[
'B']
22124 CHB.mode = Mode.HI_Z_SPLIT
22137 devx.set_adc_mux(0)
22138 if devx.hwver ==
"F":
22139 print(
"Rev F Board I/O ports set")
22158 SDATAPort.set(PIO_1)
22159 SCLKPort.set(PIO_2)
22160 SLATCHPort.set(PIO_0)
22163 global SAMPLErate, AWGSAMPLErate, BaseSampleRate, session, ETSStatus, etssrlab, RevDate
22164 global Two_X_Sample, ADC_Mux_Mode, SampleRatewindow, SampleRateStatus, BaseRatesb
22165 global Alternate_Sweep_Mode, DeBugMode, FWRevOne, SWRev, SampRateList
22166 global FrameRefief, BorderSize
22168 if SampleRateStatus.get() == 0:
22169 SampleRateStatus.set(1)
22170 SampleRatewindow = Toplevel()
22171 SampleRatewindow.title(
"Set Sample Rate " + SWRev + RevDate)
22172 SampleRatewindow.resizable(FALSE,FALSE)
22173 SampleRatewindow.protocol(
"WM_DELETE_WINDOW", DestroySampleRate)
22174 frame1 = Frame(SampleRatewindow, borderwidth=BorderSize, relief=FrameRefief)
22175 frame1.grid(row=0, column=0, sticky=W)
22177 BaseRATE = Frame( frame1 )
22178 BaseRATE.grid(row=0, column=0, sticky=W)
22179 baseratelab = Label(BaseRATE, text=
"Base Sample Rate", style=
"A10B.TLabel")
22180 baseratelab.pack(side=LEFT)
22181 BaseRatesb = Spinbox(BaseRATE, width=6, values=SampRateList, command=SetSampleRate)
22182 BaseRatesb.bind(
'<MouseWheel>', onSrateScroll)
22183 BaseRatesb.bind(
"<Button-4>", onSrateScroll)
22184 BaseRatesb.bind(
"<Button-5>", onSrateScroll)
22185 BaseRatesb.bind(
"<Return>", onRetSrate)
22186 BaseRatesb.pack(side=LEFT)
22187 BaseRatesb.delete(0,
"end")
22188 BaseRatesb.insert(0,BaseSampleRate)
22191 if FWRevOne > 2.16:
22192 twoX = Checkbutton(frame1, text=
"Double Sample Rate", variable=Two_X_Sample, command=SetADC_Mux )
22193 twoX.grid(row=1, column=0, sticky=W)
22194 muxlab1 = Label(frame1, text=
"ADC MUX Modes", style=
"A10B.TLabel")
22195 muxlab1.grid(row=2, column=0, sticky=W)
22196 AltSweep = Checkbutton(frame1, text=
"Alternate Sweep Mode", variable=Alternate_Sweep_Mode )
22197 AltSweep.grid(row=3, column=0, sticky=W)
22198 chabuttons = Frame( frame1 )
22199 chabuttons.grid(row=4, column=0, sticky=W)
22200 muxrb1 = Radiobutton(chabuttons, text=
"VA and VB", variable=ADC_Mux_Mode, value=0, command=SetADC_Mux )
22201 muxrb1.pack(side=LEFT)
22202 muxrb2 = Radiobutton(chabuttons, text=
"IA and IB", variable=ADC_Mux_Mode, value=1, command=SetADC_Mux )
22203 muxrb2.pack(side=LEFT)
22204 chcbuttons = Frame( frame1 )
22205 chcbuttons.grid(row=5, column=0, sticky=W)
22206 muxrb5 = Radiobutton(chcbuttons, text=
"VA and IA", variable=ADC_Mux_Mode, value=4, command=SetADC_Mux )
22207 muxrb5.pack(side=LEFT)
22208 muxrb6 = Radiobutton(chcbuttons, text=
"VB and IB", variable=ADC_Mux_Mode, value=5, command=SetADC_Mux )
22209 muxrb6.pack(side=LEFT)
22212 chbbuttons = Frame( frame1 )
22213 chbbuttons.grid(row=nextrow, column=0, sticky=W)
22214 muxrb3 = Radiobutton(chbbuttons, text=
"VA and IB", variable=ADC_Mux_Mode, value=2, command=SetADC_Mux )
22215 muxrb3.pack(side=LEFT)
22216 muxrb4 = Radiobutton(chbbuttons, text=
"VB and IA", variable=ADC_Mux_Mode, value=3, command=SetADC_Mux )
22217 muxrb4.pack(side=LEFT)
22218 nextrow = nextrow + 1
22220 sratedismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySampleRate)
22221 sratedismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
22224 global SampleRatewindow, SampleRateStatus
22226 SampleRateStatus.set(0)
22227 SampleRatewindow.destroy()
22241 global SAMPLErate, BaseSampleRate, AWGSAMPLErate, session, ETSStatus, etssrlab, BaseRatesb
22242 global Two_X_Sample, ADC_Mux_Mode, rtsrlab, RUNstatus
22246 if (RUNstatus.get() == 1):
22250 NewRate = int(BaseRatesb.get())
22251 if NewRate <= 100000:
22252 BaseSampleRate = NewRate
22254 BaseSampleRate = 100000
22255 BaseRatesb.delete(0,
"end")
22256 BaseRatesb.insert(0,BaseSampleRate)
22257 SAMPLErate = BaseSampleRate
22260 session.configure(sample_rate=BaseSampleRate)
22261 BaseSampleRate = session.sample_rate
22263 SAMPLErate = BaseSampleRate
22265 AWGSAMPLErate = BaseSampleRate
22266 if ETSStatus.get() > 0:
22267 SRstring =
"RT Sample Rate = " + str(BaseSampleRate)
22268 rtsrlab.config(text=SRstring)
22270 BaseRatesb.delete(0,
"end")
22271 BaseRatesb.insert(0,BaseSampleRate)
22273 if (WasRunning == 1):
22278 global StopFreqEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
22282 StopFrequency = float(StopFreqEntry.get())
22284 StopFreqEntry.delete(0,
"end")
22285 StopFreqEntry.insert(0,50000)
22286 StopFrequency = 50000
22287 if FWRevOne > 2.16:
22288 if StopFrequency >= 50000:
22289 Two_X_Sample.set(1)
22290 ADC_Mux_Mode.set(0)
22293 Two_X_Sample.set(0)
22294 ADC_Mux_Mode.set(0)
22298 global StopBodeEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
22302 StopFrequency = float(StopBodeEntry.get())
22304 StopBodeEntry.delete(0,
"end")
22305 StopBodeEntry.insert(0,20000)
22306 StopFrequency = 20000
22307 if FWRevOne > 2.16:
22308 if StopFrequency >= 20000:
22309 Two_X_Sample.set(1)
22310 ADC_Mux_Mode.set(0)
22313 Two_X_Sample.set(0)
22314 ADC_Mux_Mode.set(0)
22318 global devx, SAMPLErate, BaseSampleRate, Two_X_Sample, ADC_Mux_Mode, CHA, CHB
22319 global v1_adc_conf, i1_adc_conf, v2_adc_conf, i2_adc_conf
22320 global AWGSync, discontloop, session, ADsignal1
22322 if Two_X_Sample.get() == 1:
22323 if ADC_Mux_Mode.get() == 0:
22324 devx.set_adc_mux(1)
22325 elif ADC_Mux_Mode.get() == 1:
22326 devx.set_adc_mux(2)
22327 elif ADC_Mux_Mode.get() == 2:
22329 devx.set_adc_mux(2)
22331 devx.set_adc_mux(7)
22332 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
22333 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
22334 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
22335 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
22337 elif ADC_Mux_Mode.get() == 3:
22340 devx.set_adc_mux(7)
22341 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
22342 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
22343 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
22344 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
22346 elif ADC_Mux_Mode.get() == 4:
22348 devx.set_adc_mux(2)
22349 if AWGSync.get() > 0:
22350 if discontloop > 0:
22356 ADsignal1 = devx.get_samples(1000)
22359 if session.continuous:
22360 ADsignal1 = devx.read(1000, -1,
True)
22362 devx.set_adc_mux(4)
22363 elif ADC_Mux_Mode.get() == 5:
22365 devx.set_adc_mux(2)
22366 if AWGSync.get() > 0:
22367 if discontloop > 0:
22373 ADsignal1 = devx.get_samples(1000)
22376 if session.continuous:
22377 ADsignal1 = devx.read(1000, -1,
True)
22379 devx.set_adc_mux(5)
22380 SAMPLErate = BaseSampleRate * 2
22382 devx.set_adc_mux(0)
22383 SAMPLErate = BaseSampleRate
22386 global ADC_Mux_Mode, Alternate_Sweep_Mode, ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
22388 if ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22389 ADC_Mux_Mode.set(0)
22390 Alternate_Sweep_Mode.set(1)
22391 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 0:
22392 ADC_Mux_Mode.set(0)
22393 Alternate_Sweep_Mode.set(1)
22394 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22395 ADC_Mux_Mode.set(0)
22396 Alternate_Sweep_Mode.set(1)
22397 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22398 ADC_Mux_Mode.set(0)
22399 Alternate_Sweep_Mode.set(1)
22400 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22401 ADC_Mux_Mode.set(0)
22402 Alternate_Sweep_Mode.set(1)
22404 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22405 ADC_Mux_Mode.set(1)
22406 Alternate_Sweep_Mode.set(0)
22407 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
22408 ADC_Mux_Mode.set(1)
22409 Alternate_Sweep_Mode.set(0)
22410 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
22411 ADC_Mux_Mode.set(1)
22412 Alternate_Sweep_Mode.set(0)
22413 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
22414 ADC_Mux_Mode.set(4)
22415 Alternate_Sweep_Mode.set(0)
22416 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
22417 ADC_Mux_Mode.set(5)
22418 Alternate_Sweep_Mode.set(0)
22420 ADC_Mux_Mode.set(0)
22421 Alternate_Sweep_Mode.set(0)
22426 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples
22427 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
22430 if askyesno(
"Update current firmware",
"Flash new firmware to current device:\n(Yes) or (No)?"):
22431 filename = askopenfilename(defaultextension =
".bin", filetypes=[(
"Binary",
"*.bin")])
22436 print(
"Cancel current session.")
22438 print( session.cancelled)
22440 print(
"Waiting 5...")
22442 print(
"Put board in Samba mode and flash firmware.")
22443 session.flash_firmware(filename)
22445 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
22454 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
22455 showwarning(
"Exit ALICE",
"Must Exit Program: \n Restart ALICE to continue.")
22467 global OhmDisp, OhmStatus, ohmwindow, RevDate, RMode, OhmA0, OhmA1, OhmRunStatus
22468 global CHATestVEntry, CHATestREntry, SWRev, AWGSync, OnBoardRes
22469 global FrameRefief, BorderSize
22471 if OhmStatus.get() == 0:
22476 ohmwindow = Toplevel()
22477 ohmwindow.title(
"DC Ohmmeter " + SWRev + RevDate)
22478 ohmwindow.resizable(FALSE,FALSE)
22479 ohmwindow.protocol(
"WM_DELETE_WINDOW", DestroyOhmScreen)
22480 frame1 = Frame(ohmwindow, borderwidth=BorderSize, relief=FrameRefief)
22481 frame1.grid(row=0, column=0, sticky=W)
22483 buttons = Frame( frame1 )
22484 buttons.grid(row=0, column=0, sticky=W)
22485 omrb2 = Radiobutton(buttons, text=
"Run", style=
"Run.TRadiobutton", variable=OhmRunStatus, value=1, command=BStartOhm )
22486 omrb2.pack(side=LEFT)
22487 omrb1 = Radiobutton(buttons, text=
"Stop", style=
"Stop.TRadiobutton", variable=OhmRunStatus, value=0, command=BStop )
22488 omrb1.pack(side=LEFT)
22490 OhmA0 = Label(frame1, style=
"A16B.TLabel")
22491 OhmA0.grid(row=1, column=0, columnspan=2, sticky=W)
22492 OhmA0.config(text =
"0.000 Ohms")
22494 OhmA1 = Label(frame1, style=
"A12B.TLabel")
22495 OhmA1.grid(row=2, column=0, columnspan=2, sticky=W)
22496 OhmA1.config(text =
"Meas 0.00 mA 0.00 V")
22498 TestVA = Frame( frame1 )
22499 TestVA.grid(row=3, column=0, sticky=W)
22500 chatestvlab = Label(TestVA, text=
"Test Voltage", style=
"A10B.TLabel")
22501 chatestvlab.pack(side=LEFT)
22502 CHATestVEntry = Entry(TestVA, width=6, cursor=
'double_arrow')
22503 CHATestVEntry.pack(side=LEFT)
22504 CHATestVEntry.bind(
'<MouseWheel>', onTextScroll)
22505 CHATestVEntry.bind(
"<Button-4>", onTextScroll)
22506 CHATestVEntry.bind(
"<Button-5>", onTextScroll)
22507 CHATestVEntry.delete(0,
"end")
22508 CHATestVEntry.insert(0,5.0)
22512 TestMode = Frame( frame1 )
22513 TestMode.grid(row=4, column=0, sticky=W)
22514 modelab = Label(TestMode, text=
"Known Res", style=
"A10B.TLabel")
22515 modelab.pack(side=LEFT)
22516 rm3 = Radiobutton(TestMode, text=
"Ext", variable=RMode, value=0)
22517 rm3.pack(side=LEFT)
22518 rm4 = Radiobutton(TestMode, text=
"Int", variable=RMode, value=1)
22519 rm4.pack(side=LEFT)
22521 TestRA = Frame( frame1 )
22522 TestRA.grid(row=5, column=0, sticky=W)
22523 chatestrlab = Label(TestRA, text=
"Known Res", style=
"A10B.TLabel")
22524 chatestrlab.pack(side=LEFT)
22525 CHATestREntry = Entry(TestRA, width=6, cursor=
'double_arrow')
22526 CHATestREntry.pack(side=LEFT)
22527 CHATestREntry.bind(
'<MouseWheel>', onTextScroll)
22528 CHATestREntry.bind(
"<Button-4>", onTextScroll)
22529 CHATestREntry.bind(
"<Button-5>", onTextScroll)
22530 CHATestREntry.delete(0,
"end")
22531 CHATestREntry.insert(0,OnBoardRes)
22533 ohmdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOhmScreen)
22534 ohmdismissclbutton.grid(row=6, column=0, sticky=W, pady=7)
22537 global ohmwindow, OhmStatus, OhmDisp
22542 ohmwindow.destroy()
22545 global FMulXEntry, MulXEntry, etswindow, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate
22546 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, enb1, rtsrlab, etssrlab, RevDate, SWRev
22547 global MinigenScreenStatus, DeBugMode
22548 global FrameRefief, BorderSize
22551 if ETSStatus.get() == 0:
22552 BaseFreq = (-10, -15, -20, -25, -30, -35, -40, -45, -50, -60, -70, -80, -90, -100)
22555 etswindow = Toplevel()
22556 etswindow.title(
"ETS Controls " + SWRev + RevDate)
22557 etswindow.resizable(FALSE,FALSE)
22558 etswindow.protocol(
"WM_DELETE_WINDOW", DestroyETSScreen)
22559 frame1 = Frame(etswindow, borderwidth=BorderSize, relief=FrameRefief)
22560 frame1.grid(row=0, column=0, sticky=W)
22562 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
22563 rtsrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
22564 rtsrlab.grid(row=1, column=0, sticky=W)
22565 ESRstring =
"ET Sample Rate = " + str(SAMPLErate)
22566 etssrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
22567 etssrlab.grid(row=2, column=0, sticky=W)
22568 etssrbutton = Button(frame1, text=
"Set RT Sample Rate", command=MakeSampleRateMenu)
22569 etssrbutton.grid(row=3, column=0, sticky=W, pady=7)
22570 enb1 = Checkbutton(frame1,text=
"Enable ETS", variable=ETSDisp, command=ETSCheckBox)
22571 enb1.grid(row=4, column=0, sticky=W)
22573 Divx = Frame( frame1 )
22574 Divx.grid(row=5, column=0, sticky=W)
22575 DivXEntry = Entry(Divx, width=6, cursor=
'double_arrow')
22576 DivXEntry.bind(
'<MouseWheel>', ETSscroll)
22577 DivXEntry.bind(
"<Button-4>", ETSscroll)
22578 DivXEntry.bind(
"<Button-5>", ETSscroll)
22579 DivXEntry.pack(side=RIGHT)
22580 DivXEntry.delete(0,
"end")
22581 DivXEntry.insert(0,2)
22582 divxlab = Label( Divx, text =
"Divide Factor")
22583 divxlab.pack(side=RIGHT)
22587 FOffEntry = Label(frame1, text=
"Samples")
22588 FOffEntry.grid(row=GridRow+1, column=0, sticky=W)
22589 MulXEntry = Label( frame1, text =
"Rec Len Mul")
22590 MulXEntry.grid(row=GridRow+2, column=0, sticky=W)
22591 GridRow = GridRow + 2
22593 eqivsamplerate = Label(frame1, text=
"MHz", style=
"A10B.TLabel")
22594 eqivsamplerate.grid(row=GridRow+1, column=0, sticky=W)
22596 FConv = Frame( frame1 )
22597 FConv.grid(row=GridRow+2, column=0, sticky=W)
22598 FMulXEntry = Entry(FConv, width=3, cursor=
'double_arrow')
22599 FMulXEntry.bind(
'<MouseWheel>', ETSscroll)
22600 FMulXEntry.bind(
"<Button-4>", ETSscroll)
22601 FMulXEntry.bind(
"<Button-5>", ETSscroll)
22602 FMulXEntry.pack(side=RIGHT)
22603 FMulXEntry.delete(0,
"end")
22604 FMulXEntry.insert(0,1)
22605 fminlab = Label( FConv, text =
"Freq Multiplier")
22606 fminlab.pack(side=RIGHT)
22608 FminDisp = Label(frame1, text=
"32768 Hz", style=
"A10B.TLabel")
22609 FminDisp.grid(row=GridRow+3, column=0, sticky=W)
22611 if MinigenScreenStatus.get() > 0:
22612 mgloadbutton = Button(frame1, text=
"Load to MinGen", command=MGLoad)
22613 mgloadbutton.grid(row=GridRow+4, column=0, sticky=W)
22614 GridRow = GridRow + 1
22616 dirlab = Label(frame1, text=
"Sample Data Order", style=
"A10B.TLabel")
22617 dirlab.grid(row=GridRow+5, column=0, sticky=W)
22618 DataMode = Frame( frame1 )
22619 DataMode.grid(row=GridRow+6, column=0, sticky=W)
22620 dm3 = Radiobutton(DataMode, text=
"Forward", variable=ETSDir, value=0)
22621 dm3.pack(side=LEFT)
22622 dm4 = Radiobutton(DataMode, text=
"Reverse", variable=ETSDir, value=1)
22623 dm4.pack(side=LEFT)
22624 tclab = Label(frame1, text=
"CH B Time Shift", style=
"A10B.TLabel")
22625 tclab.grid(row=GridRow+7, column=0, sticky=W)
22626 TSMode = Frame( frame1 )
22627 TSMode.grid(row=GridRow+8, column=0, sticky=W)
22628 ETSts = Entry(TSMode, width=6, cursor=
'double_arrow')
22629 ETSts.bind(
'<MouseWheel>', ETSscroll)
22630 ETSts.bind(
"<Button-4>", ETSscroll)
22631 ETSts.bind(
"<Button-5>", ETSscroll)
22632 ETSts.pack(side=RIGHT)
22633 ETSts.delete(0,
"end")
22635 ETStslab = Label( TSMode, text =
"Factor")
22636 ETStslab.pack(side=RIGHT)
22638 etsdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyETSScreen)
22639 etsdismissclbutton.grid(row=GridRow+9, column=0, sticky=W, pady=7)
22644 global etswindow, ETSStatus, ETSDisp
22649 etswindow.destroy()
22652 global MinigenFout, Fmin, ETSDir
22654 MinigenFout.delete(0,
"end")
22655 if ETSDir.get() == 0:
22656 MinigenFout.insert(0,Fmin+20)
22658 MinigenFout.insert(0,Fmin-20)
22672 global Two_X_Sample, HtMulEntry, ETSts, etssrlab, SAMPLErate
22677 TscaleX = float(HtMulEntry.get())
22679 HtMulEntry.delete(0,END)
22680 HtMulEntry.insert(0, 1)
22681 if Two_X_Sample.get() == 0:
22682 ToffsetX = TscaleX/10.0
22685 ETSts.delete(0,
"end")
22686 ETSts.insert(0,ToffsetX)
22687 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
22688 etssrlab.config(text=SRstring)
22694 global FMulXEntry, MulXEntry, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate, MaxETSrecord
22695 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, DivX, FOff, MulX, Fmin, FMul, SAMPLErate, TIMEdiv
22696 global FminEntry, HtMulEntry, Two_X_Sample, DeBugMode
22699 MaxETSrecord = int(SAMPLErate * 10 * TIMEdiv / 1000.0)
22701 MaxETSrecord = int(SAMPLErate * 20 * TIMEdiv / 1000.0)
22702 if (MaxETSrecord*100) > MaxSamples:
22703 MaxETSrecord = MaxSamples / 100
22705 DivX = float(eval(DivXEntry.get()))
22710 DivXEntry.delete(0,END)
22711 DivXEntry.insert(0, DivX)
22713 DivXEntry.delete(0,END)
22714 DivXEntry.insert(0, DivX)
22717 MulX = (DivX*SAMPLErate)/(100*FOff)
22718 while MulX > MaxETSrecord:
22720 MulX = (DivX*SAMPLErate)/(100*FOff)
22723 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
22724 MulXEntry.config(text = SRstring)
22725 SRstring =
"Offset = " + str(FOff) +
" samples"
22726 FOffEntry.config(text = SRstring)
22727 baseFreq = SAMPLErate/DivX
22729 FMul = float(eval(FMulXEntry.get()))
22732 FMulXEntry.delete(0,END)
22733 FMulXEntry.insert(0, int(FMul))
22736 FMulXEntry.delete(0,END)
22737 FMulXEntry.insert(0, int(FMul))
22739 FMulXEntry.delete(0,END)
22740 FMulXEntry.insert(0, int(FMul))
22741 FreqMin = baseFreq * FMul
22742 SRstring =
"Multiplied Freq = " +
' {0:.1f} '.format(FreqMin) +
" Hz"
22743 FminDisp.config(text = SRstring)
22744 SRstring =
"Base Frequency = " +
' {0:.2f} '.format(baseFreq) +
" Hz"
22745 eqivsamplerate.config(text = SRstring)
22748 MinFreq = eval(FminEntry.get()) * 1000
22750 FminEntry.delete(0,END)
22751 FminEntry.insert(0, 25)
22754 TscaleX = int((MinFreq)/(DivX * (MinFreq - FreqMin)))
22762 TscaleX = abs(TscaleX)
22763 if Two_X_Sample.get() == 0:
22764 ToffsetX = TscaleX/10.0
22767 ETSts.delete(0,
"end")
22768 ETSts.insert(0,ToffsetX)
22770 HtMulEntry.delete(0,END)
22771 HtMulEntry.insert(0, TscaleX)
22772 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
22773 rtsrlab.config(text=SRstring)
22774 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
22775 etssrlab.config(text=SRstring)
22786 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
22787 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
22788 global AWG_Amp_Mode, SWRev, EnableHSsampling, Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
22789 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry, TrgLPFEntry, Trigger_LPF_length
22790 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
22791 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
22792 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
22793 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
22794 global FrameRefief, BorderSize
22796 if SettingsStatus.get() == 0:
22797 SettingsStatus.set(1)
22798 Settingswindow = Toplevel()
22799 Settingswindow.title(
"Settings " + SWRev + RevDate)
22800 Settingswindow.resizable(FALSE,FALSE)
22801 Settingswindow.protocol(
"WM_DELETE_WINDOW", DestroySettings)
22802 frame1 = Frame(Settingswindow, borderwidth=BorderSize, relief=FrameRefief)
22803 frame1.grid(row=0, column=0, sticky=W)
22805 zstlab = Label(frame1, text=
"FFT Zero Stuffing", style=
"A10B.TLabel")
22806 zstlab.grid(row=0, column=0, sticky=W)
22807 zstMode = Frame( frame1 )
22808 zstMode.grid(row=0, column=1, sticky=W)
22809 ZSTuff = Entry(zstMode, width=4, cursor=
'double_arrow')
22810 ZSTuff.bind(
"<Return>", SettingsTextKey)
22811 ZSTuff.bind(
'<MouseWheel>', Settingsscroll)
22812 ZSTuff.bind(
"<Button-4>", Settingsscroll)
22813 ZSTuff.bind(
"<Button-5>", Settingsscroll)
22814 ZSTuff.bind(
'<Key>', SettingsTextKey)
22815 ZSTuff.pack(side=RIGHT)
22816 ZSTuff.delete(0,
"end")
22817 ZSTuff.insert(0,ZEROstuffing.get())
22819 Avglab = Label(frame1, text=
"Number Traces to Average", style=
"A10B.TLabel")
22820 Avglab.grid(row=1, column=0, sticky=W)
22821 AvgMode = Frame( frame1 )
22822 AvgMode.grid(row=1, column=1, sticky=W)
22823 TAvg = Entry(AvgMode, width=4, cursor=
'double_arrow')
22824 TAvg.bind(
"<Return>", SettingsTextKey)
22825 TAvg.bind(
'<MouseWheel>', Settingsscroll)
22826 TAvg.bind(
"<Button-4>", Settingsscroll)
22827 TAvg.bind(
"<Button-5>", Settingsscroll)
22828 TAvg.bind(
'<Key>', SettingsTextKey)
22829 TAvg.pack(side=RIGHT)
22830 TAvg.delete(0,
"end")
22831 TAvg.insert(0,TRACEaverage.get())
22833 HarMlab = Label(frame1, text=
"Number of Harmonic Markers", style=
"A10B.TLabel")
22834 HarMlab.grid(row=2, column=0, sticky=W)
22835 HarMMode = Frame( frame1 )
22836 HarMMode.grid(row=2, column=1, sticky=W)
22837 HarMon = Entry(HarMMode, width=4, cursor=
'double_arrow')
22838 HarMon.bind(
"<Return>", SettingsTextKey)
22839 HarMon.bind(
'<MouseWheel>', Settingsscroll)
22840 HarMon.bind(
"<Button-4>", Settingsscroll)
22841 HarMon.bind(
"<Button-5>", Settingsscroll)
22842 HarMon.bind(
'<Key>', SettingsTextKey)
22843 HarMon.pack(side=RIGHT)
22844 HarMon.delete(0,
"end")
22845 HarMon.insert(0,HarmonicMarkers.get())
22847 Vdivlab = Label(frame1, text=
"Number Vertical Div (SA, Bode)", style=
"A10B.TLabel")
22848 Vdivlab.grid(row=3, column=0, sticky=W)
22849 VdivMode = Frame( frame1 )
22850 VdivMode.grid(row=3, column=1, sticky=W)
22851 VDivE = Entry(VdivMode, width=4, cursor=
'double_arrow')
22852 VDivE.bind(
"<Return>", SettingsTextKey)
22853 VDivE.bind(
'<MouseWheel>', Settingsscroll)
22854 VDivE.bind(
"<Button-4>", Settingsscroll)
22855 VDivE.bind(
"<Button-5>", Settingsscroll)
22856 VDivE.bind(
'<Key>', SettingsTextKey)
22857 VDivE.pack(side=RIGHT)
22858 VDivE.delete(0,
"end")
22859 VDivE.insert(0,Vdiv.get())
22861 Twdthlab = Label(frame1, text=
"Trace Width in Pixels", style=
"A10B.TLabel")
22862 Twdthlab.grid(row=4, column=0, sticky=W)
22863 TwdthMode = Frame( frame1 )
22864 TwdthMode.grid(row=4, column=1, sticky=W)
22865 TwdthE = Entry(TwdthMode, width=4, cursor=
'double_arrow')
22866 TwdthE.bind(
"<Return>", SettingsTextKey)
22867 TwdthE.bind(
'<MouseWheel>', Settingsscroll)
22868 TwdthE.bind(
"<Button-4>", Settingsscroll)
22869 TwdthE.bind(
"<Button-5>", Settingsscroll)
22870 TwdthE.bind(
'<Key>', SettingsTextKey)
22871 TwdthE.pack(side=RIGHT)
22872 TwdthE.delete(0,
"end")
22873 TwdthE.insert(0,TRACEwidth.get())
22875 Gwdthlab = Label(frame1, text=
"Grid Width in Pixels", style=
"A10B.TLabel")
22876 Gwdthlab.grid(row=5, column=0, sticky=W)
22877 GwdthMode = Frame( frame1 )
22878 GwdthMode.grid(row=5, column=1, sticky=W)
22879 GwdthE = Entry(GwdthMode, width=4, cursor=
'double_arrow')
22880 GwdthE.bind(
"<Return>", SettingsTextKey)
22881 GwdthE.bind(
'<MouseWheel>', Settingsscroll)
22882 GwdthE.bind(
"<Button-4>", Settingsscroll)
22883 GwdthE.bind(
"<Button-5>", Settingsscroll)
22884 GwdthE.bind(
'<Key>', SettingsTextKey)
22885 GwdthE.pack(side=RIGHT)
22886 GwdthE.delete(0,
"end")
22887 GwdthE.insert(0,GridWidth.get())
22889 trglpflab = Label(frame1, text=
"Trigger LPF Length", style=
"A10B.TLabel")
22890 trglpflab.grid(row=6, column=0, sticky=W)
22891 TrgLPFMode = Frame( frame1 )
22892 TrgLPFMode.grid(row=6, column=1, sticky=W)
22893 TrgLPFEntry = Entry(TrgLPFMode, width=4, cursor=
'double_arrow')
22894 TrgLPFEntry.bind(
"<Return>", SettingsTextKey)
22895 TrgLPFEntry.bind(
'<MouseWheel>', Settingsscroll)
22896 TrgLPFEntry.bind(
"<Button-4>", Settingsscroll)
22897 TrgLPFEntry.bind(
"<Button-5>", Settingsscroll)
22898 TrgLPFEntry.bind(
'<Key>', SettingsTextKey)
22899 TrgLPFEntry.pack(side=RIGHT)
22900 TrgLPFEntry.delete(0,
"end")
22901 TrgLPFEntry.insert(0,Trigger_LPF_length.get())
22903 AwgAmplrb1 = Radiobutton(frame1, text=
"AWG Min/Max", variable=AWG_Amp_Mode, value=0, command=UpdateAWGWin)
22904 AwgAmplrb1.grid(row=7, column=0, sticky=W)
22905 AwgAmplrb2 = Radiobutton(frame1, text=
"AWG Amp/Off ", variable=AWG_Amp_Mode, value=1, command=UpdateAWGWin)
22906 AwgAmplrb2.grid(row=7, column=1, sticky=W)
22908 cha_Rcomplab = Label(frame1, text=
"CHA Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
22909 cha_Rcomplab.grid(row=8, column=0, sticky=W)
22910 cha_RcomplabMode = Frame( frame1 )
22911 cha_RcomplabMode.grid(row=8, column=1, sticky=W)
22912 cha_TC1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
22913 cha_TC1Entry.bind(
"<Return>", SettingsTextKey)
22914 cha_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
22915 cha_TC1Entry.bind(
"<Button-4>", Settingsscroll)
22916 cha_TC1Entry.bind(
"<Button-5>", Settingsscroll)
22917 cha_TC1Entry.bind(
'<Key>', SettingsTextKey)
22918 cha_TC1Entry.pack(side=LEFT)
22919 cha_TC1Entry.delete(0,
"end")
22920 cha_TC1Entry.insert(0,CHA_TC1.get())
22921 cha_A1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
22922 cha_A1Entry.bind(
"<Return>", SettingsTextKey)
22923 cha_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
22924 cha_A1Entry.bind(
"<Button-4>", Settingsscroll)
22925 cha_A1Entry.bind(
"<Button-5>", Settingsscroll)
22926 cha_A1Entry.bind(
'<Key>', SettingsTextKey)
22927 cha_A1Entry.pack(side=LEFT)
22928 cha_A1Entry.delete(0,
"end")
22929 cha_A1Entry.insert(0,CHA_A1.get())
22931 cha_Ccomplab = Label(frame1, text=
"CHA Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
22932 cha_Ccomplab.grid(row=9, column=0, sticky=W)
22933 cha_CcomplabMode = Frame( frame1 )
22934 cha_CcomplabMode.grid(row=9, column=1, sticky=W)
22935 cha_TC2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
22936 cha_TC2Entry.bind(
"<Return>", SettingsTextKey)
22937 cha_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
22938 cha_TC2Entry.bind(
"<Button-4>", Settingsscroll)
22939 cha_TC2Entry.bind(
"<Button-5>", Settingsscroll)
22940 cha_TC2Entry.bind(
'<Key>', SettingsTextKey)
22941 cha_TC2Entry.pack(side=LEFT)
22942 cha_TC2Entry.delete(0,
"end")
22943 cha_TC2Entry.insert(0,CHA_TC2.get())
22944 cha_A2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
22945 cha_A2Entry.bind(
"<Return>", SettingsTextKey)
22946 cha_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
22947 cha_A2Entry.bind(
"<Button-4>", Settingsscroll)
22948 cha_A2Entry.bind(
"<Button-5>", Settingsscroll)
22949 cha_A2Entry.bind(
'<Key>', SettingsTextKey)
22950 cha_A2Entry.pack(side=LEFT)
22951 cha_A2Entry.delete(0,
"end")
22952 cha_A2Entry.insert(0,CHA_A2.get())
22954 chb_Rcomplab = Label(frame1, text=
"CHB Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
22955 chb_Rcomplab.grid(row=10, column=0, sticky=W)
22956 chb_RcomplabMode = Frame( frame1 )
22957 chb_RcomplabMode.grid(row=10, column=1, sticky=W)
22958 chb_TC1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
22959 chb_TC1Entry.bind(
"<Return>", SettingsTextKey)
22960 chb_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
22961 chb_TC1Entry.bind(
"<Button-4>", Settingsscroll)
22962 chb_TC1Entry.bind(
"<Button-5>", Settingsscroll)
22963 chb_TC1Entry.bind(
'<Key>', SettingsTextKey)
22964 chb_TC1Entry.pack(side=LEFT)
22965 chb_TC1Entry.delete(0,
"end")
22966 chb_TC1Entry.insert(0,CHB_TC1.get())
22967 chb_A1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
22968 chb_A1Entry.bind(
"<Return>", SettingsTextKey)
22969 chb_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
22970 chb_A1Entry.bind(
"<Button-4>", Settingsscroll)
22971 chb_A1Entry.bind(
"<Button-5>", Settingsscroll)
22972 chb_A1Entry.bind(
'<Key>', SettingsTextKey)
22973 chb_A1Entry.pack(side=LEFT)
22974 chb_A1Entry.delete(0,
"end")
22975 chb_A1Entry.insert(0,CHB_A1.get())
22977 chb_Ccomplab = Label(frame1, text=
"CHB Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
22978 chb_Ccomplab.grid(row=11, column=0, sticky=W)
22979 chb_CcomplabMode = Frame( frame1 )
22980 chb_CcomplabMode.grid(row=11, column=1, sticky=W)
22981 chb_TC2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
22982 chb_TC2Entry.bind(
"<Return>", SettingsTextKey)
22983 chb_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
22984 chb_TC2Entry.bind(
"<Button-4>", Settingsscroll)
22985 chb_TC2Entry.bind(
"<Button-5>", Settingsscroll)
22986 chb_TC2Entry.bind(
'<Key>', SettingsTextKey)
22987 chb_TC2Entry.pack(side=LEFT)
22988 chb_TC2Entry.delete(0,
"end")
22989 chb_TC2Entry.insert(0,CHB_TC2.get())
22990 chb_A2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
22991 chb_A2Entry.bind(
"<Return>", SettingsTextKey)
22992 chb_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
22993 chb_A2Entry.bind(
"<Button-4>", Settingsscroll)
22994 chb_A2Entry.bind(
"<Button-5>", Settingsscroll)
22995 chb_A2Entry.bind(
'<Key>', SettingsTextKey)
22996 chb_A2Entry.pack(side=LEFT)
22997 chb_A2Entry.delete(0,
"end")
22998 chb_A2Entry.insert(0,CHB_A2.get())
23000 if EnableHSsampling > 0:
23001 hs_ckb1 = Checkbutton(frame1, text=
"Auto Set ETS Comp", variable=Auto_ETS_Comp, command=SetETSComp)
23002 hs_ckb1.grid(row=12, column=0, sticky=W)
23003 hs1_Complab = Label(frame1, text=
"ETS Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
23004 hs1_Complab.grid(row=13, column=0, sticky=W)
23005 hs1_ComplabMode = Frame( frame1 )
23006 hs1_ComplabMode.grid(row=13, column=1, sticky=W)
23007 ets_TC1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
23008 ets_TC1Entry.bind(
"<Return>", SettingsTextKey)
23009 ets_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
23010 ets_TC1Entry.bind(
"<Button-4>", Settingsscroll)
23011 ets_TC1Entry.bind(
"<Button-5>", Settingsscroll)
23012 ets_TC1Entry.bind(
'<Key>', SettingsTextKey)
23013 ets_TC1Entry.pack(side=LEFT)
23014 ets_TC1Entry.delete(0,
"end")
23015 ets_TC1Entry.insert(0,ETS_TC1.get())
23016 ets_A1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
23017 ets_A1Entry.bind(
"<Return>", SettingsTextKey)
23018 ets_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
23019 ets_A1Entry.bind(
"<Button-4>", Settingsscroll)
23020 ets_A1Entry.bind(
"<Button-5>", Settingsscroll)
23021 ets_A1Entry.bind(
'<Key>', SettingsTextKey)
23022 ets_A1Entry.pack(side=LEFT)
23023 ets_A1Entry.delete(0,
"end")
23024 ets_A1Entry.insert(0,ETS_A1.get())
23026 hs2_Complab = Label(frame1, text=
"ETS Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
23027 hs2_Complab.grid(row=14, column=0, sticky=W)
23028 hs2_ComplabMode = Frame( frame1 )
23029 hs2_ComplabMode.grid(row=14, column=1, sticky=W)
23030 ets_TC2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
23031 ets_TC2Entry.bind(
"<Return>", SettingsTextKey)
23032 ets_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
23033 ets_TC2Entry.bind(
"<Button-4>", Settingsscroll)
23034 ets_TC2Entry.bind(
"<Button-5>", Settingsscroll)
23035 ets_TC2Entry.bind(
'<Key>', SettingsTextKey)
23036 ets_TC2Entry.pack(side=LEFT)
23037 ets_TC2Entry.delete(0,
"end")
23038 ets_TC2Entry.insert(0,ETS_TC2.get())
23039 ets_A2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
23040 ets_A2Entry.bind(
"<Return>", SettingsTextKey)
23041 ets_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
23042 ets_A2Entry.bind(
"<Button-4>", Settingsscroll)
23043 ets_A2Entry.bind(
"<Button-5>", Settingsscroll)
23044 ets_A2Entry.bind(
'<Key>', SettingsTextKey)
23045 ets_A2Entry.pack(side=LEFT)
23046 ets_A2Entry.delete(0,
"end")
23047 ets_A2Entry.insert(0,ETS_A2.get())
23049 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
23050 Settingsdismissbutton.grid(row=15, column=0, sticky=W, pady=7)
23052 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
23053 Settingsdismissbutton.grid(row=12, column=0, sticky=W, pady=7)
23056 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
23057 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
23058 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
23059 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
23060 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
23061 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
23063 if Auto_ETS_Comp.get() == 1:
23065 MulX = float(HtMulEntry.get())
23067 Value = float(ets_TC1Entry.get()) * MulX
23068 cha_TC1Entry.delete(0,
"end")
23069 cha_TC1Entry.insert(0, Value)
23070 cha_A1Entry.delete(0,
"end")
23071 cha_A1Entry.insert(0, ets_A1Entry.get())
23072 chb_TC1Entry.delete(0,
"end")
23073 chb_TC1Entry.insert(0, Value)
23074 chb_A1Entry.delete(0,
"end")
23075 chb_A1Entry.insert(0, ets_A1Entry.get())
23077 Value = float(ets_TC2Entry.get()) * MulX
23078 cha_TC2Entry.delete(0,
"end")
23079 cha_TC2Entry.insert(0, Value)
23080 cha_A2Entry.delete(0,
"end")
23081 cha_A2Entry.insert(0, ets_A2Entry.get())
23082 chb_TC2Entry.delete(0,
"end")
23083 chb_TC2Entry.insert(0, Value)
23084 chb_A2Entry.delete(0,
"end")
23085 chb_A2Entry.insert(0, ets_A2Entry.get())
23096 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
23097 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
23098 global CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
23099 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, TrgLPFEntry, Trigger_LPF_length
23100 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
23101 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
23104 GW = int(eval(GwdthE.get()))
23107 GwdthE.delete(0,END)
23108 GwdthE.insert(0, int(GW))
23111 GwdthE.delete(0,END)
23112 GwdthE.insert(0, int(GW))
23114 GwdthE.delete(0,END)
23115 GwdthE.insert(0, GridWidth.get())
23119 T_length = int(eval(TrgLPFEntry.get()))
23122 TrgLPFEntry.delete(0,END)
23123 TrgLPFEntry.insert(0, int(GW))
23126 TrgLPFEntry.delete(0,END)
23127 TrgLPFEntry.insert(0, int(GW))
23129 TrgLPFEntry.delete(0,END)
23130 TrgLPFEntry.insert(0, Trigger_LPF_length.get())
23131 Trigger_LPF_length.set(T_length)
23134 TW = int(eval(TwdthE.get()))
23137 TwdthE.delete(0,END)
23138 TwdthE.insert(0, int(TW))
23141 TwdthE.delete(0,END)
23142 TwdthE.insert(0, int(TW))
23144 TwdthE.delete(0,END)
23145 TwdthE.insert(0, TRACEwidth.get())
23149 TA = int(eval(TAvg.get()))
23153 TAvg.insert(0, int(TA))
23157 TAvg.insert(0, int(TA))
23160 TAvg.insert(0, TRACEaverage.get())
23161 TRACEaverage.set(TA)
23164 VDv = int(eval(VDivE.get()))
23167 VDivE.delete(0,END)
23168 VDivE.insert(0, int(VDv))
23171 VDivE.delete(0,END)
23172 VDivE.insert(0, int(VDv))
23174 VDivE.delete(0,END)
23175 VDivE.insert(0, Vdiv.get())
23179 HM = int(eval(HarMon.get()))
23182 HarMon.delete(0,END)
23183 HarMon.insert(0, int(HM))
23186 HarMon.delete(0,END)
23187 HarMon.insert(0, int(HM))
23189 HarMon.delete(0,END)
23190 HarMon.insert(0, HarmonicMarkers.get())
23191 HarmonicMarkers.set(HM)
23194 ZST = int(eval(ZSTuff.get()))
23197 ZSTuff.delete(0,END)
23198 ZSTuff.insert(0, int(ZST))
23201 ZSTuff.delete(0,END)
23202 ZSTuff.insert(0, int(ZST))
23204 ZSTuff.delete(0,END)
23205 ZSTuff.insert(0, ZEROstuffing.get())
23206 ZEROstuffing.set(ZST)
23209 TC1A = float(cha_TC1Entry.get())
23213 cha_TC1Entry.delete(0,END)
23214 cha_TC1Entry.insert(0, TC1A)
23216 cha_TC1Entry.delete(0,END)
23217 cha_TC1Entry.insert(0, CHA_TC1.get())
23219 TC2A = float(cha_TC2Entry.get())
23223 cha_TC2Entry.delete(0,END)
23224 cha_TC2Entry.insert(0, TC2A)
23226 cha_TC2Entry.delete(0,END)
23227 cha_TC2Entry.insert(0, CHA_TC2.get())
23230 Gain1A = float(cha_A1Entry.get())
23233 cha_A1Entry.delete(0,END)
23234 cha_A1Entry.insert(0, CHA_A1.get())
23236 Gain2A = float(cha_A2Entry.get())
23239 cha_A2Entry.delete(0,END)
23240 cha_A2Entry.insert(0, CHA_A2.get())
23243 TC1B = float(chb_TC1Entry.get())
23247 chb_TC1Entry.delete(0, END)
23248 chb_TC1Entry.insert(0, TC1B)
23250 chb_TC1Entry.delete(0,END)
23251 chb_TC1Entry.insert(0, CHB_TC1.get())
23253 TC2B = float(chb_TC2Entry.get())
23257 chb_TC2Entry.delete(0, END)
23258 chb_TC2Entry.insert(0, TC2B)
23260 chb_TC2Entry.delete(0,END)
23261 chb_TC2Entry.insert(0, CHB_TC2.get())
23264 Gain1B = float(chb_A1Entry.get())
23267 chb_A1Entry.delete(0,END)
23268 chb_A1Entry.insert(0, CHB_A1.get())
23270 Gain2B = float(chb_A2Entry.get())
23273 chb_A2Entry.delete(0,END)
23274 chb_A2Entry.insert(0, CHB_A2.get())
23280 global Settingswindow, SettingsStatus
23282 SettingsStatus.set(0)
23284 Settingswindow.destroy()
23287 global MouseX, MouseY, MouseWidget
23289 MouseWidget = event.widget
23290 MouseX, MouseY = event.x, event.y
23293 global FminEntry, CHAfreq
23296 String =
'{0:.3f}'.format(CHAfreq/1000)
23297 FminEntry.delete(0,
"end")
23298 FminEntry.insert(0,String)
23301 global CHAVGainEntry, CHAVOffsetEntry
23303 CHAVGainEntry.delete(0,
"end")
23304 CHAVGainEntry.insert(0,1.0)
23305 CHAVOffsetEntry.delete(0,
"end")
23306 CHAVOffsetEntry.insert(0,0.0)
23309 global CHBVGainEntry, CHBVOffsetEntry
23311 CHBVGainEntry.delete(0,
"end")
23312 CHBVGainEntry.insert(0,1.0)
23313 CHBVOffsetEntry.delete(0,
"end")
23314 CHBVOffsetEntry.insert(0,0.0)
23317 global CHAIGainEntry, CHAIOffsetEntry
23319 CHAIGainEntry.delete(0,
"end")
23320 CHAIGainEntry.insert(0,1.0)
23321 CHAIOffsetEntry.delete(0,
"end")
23322 CHAIOffsetEntry.insert(0,0.0)
23325 global CHBIGainEntry, CHBIOffsetEntry
23327 CHBIGainEntry.delete(0,
"end")
23328 CHBIGainEntry.insert(0,1.0)
23329 CHBIOffsetEntry.delete(0,
"end")
23330 CHBIOffsetEntry.insert(0,0.0)
23333 global EnablePhaseAnalizer, EnableSpectrumAnalizer, EnableBodePlotter, EnableImpedanceAnalizer
23334 global EnableOhmMeter, OOTphckb, OOTBuildPhAScreen, OOTckb3, OOTBuildSpectrumScreen, OOTckb5, ckb1
23335 global OOTBuildBodeScreen, OOTckb4, OOTBuildIAScreen, OOTckb6, OOTBuildOhmScreen, OOTScreenStatus
23336 global OOTwindow, SWRev, RevDate, BorderSize, FrameRefief, OOTdismissclbutton, EnableDigIO
23337 global EnablePIODACMode, EnableMuxMode, EnableMinigenMode, EnablePmodDA1Mode, EnableDigPotMode, EnableGenericSerialMode
23338 global EnableAD5626SerialMode, EnableDigitalFilter, EnableCommandInterface, EnableMeasureScreen, EnableETSScreen
23340 if OOTScreenStatus.get() == 0:
23341 OOTScreenStatus.set(1)
23342 OOTwindow = Toplevel()
23343 OOTwindow.title(
"Instruments " + SWRev + RevDate)
23344 OOTwindow.resizable(FALSE,FALSE)
23345 OOTwindow.protocol(
"WM_DELETE_WINDOW", DestroyOOTwindow)
23346 frame1 = Frame(OOTwindow, borderwidth=BorderSize, relief=FrameRefief)
23347 frame1.grid(row=0, column=0, sticky=W)
23350 timebtn = Frame( frame1 )
23351 timebtn.grid(row=nextrow, column=0, sticky=W)
23352 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
23353 ckb1.pack(side=LEFT)
23354 timelab = Label(timebtn, text=
"Time Plot")
23355 timelab.pack(side=LEFT)
23356 nextrow = nextrow + 1
23357 if EnablePhaseAnalizer > 0:
23358 phasebtn = Frame( frame1 )
23359 phasebtn.grid(row=nextrow, column=0, sticky=W)
23360 OOTphckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
23361 OOTphckb.pack(side=LEFT)
23362 OOTBuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
23363 OOTBuildPhAScreen.pack(side=LEFT)
23364 nextrow = nextrow + 1
23366 if EnableSpectrumAnalizer > 0:
23367 freqbtn = Frame( frame1 )
23368 freqbtn.grid(row=nextrow, column=0, sticky=W)
23369 OOTckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
23370 OOTckb3.pack(side=LEFT)
23371 OOTBuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
23372 OOTBuildSpectrumScreen.pack(side=LEFT)
23373 nextrow = nextrow + 1
23375 if EnableBodePlotter > 0:
23376 bodebtn = Frame( frame1 )
23377 bodebtn.grid(row=nextrow, column=0, sticky=W)
23378 OOTckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
23379 OOTckb5.pack(side=LEFT)
23380 OOTBuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
23381 OOTBuildBodeScreen.pack(side=LEFT)
23382 nextrow = nextrow + 1
23384 if EnableImpedanceAnalizer > 0:
23385 impdbtn = Frame( frame1 )
23386 impdbtn.grid(row=nextrow, column=0, sticky=W)
23387 OOTckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
23388 OOTckb4.pack(side=LEFT)
23389 OOTBuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
23390 OOTBuildIAScreen.pack(side=LEFT)
23391 nextrow = nextrow + 1
23393 if EnableOhmMeter > 0:
23394 dcohmbtn = Frame( frame1 )
23395 dcohmbtn.grid(row=nextrow, column=0, sticky=W)
23396 OOTckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
23397 OOTckb6.pack(side=LEFT)
23398 OOTBuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
23399 OOTBuildOhmScreen.pack(side=LEFT)
23400 nextrow = nextrow + 1
23402 if EnableDigIO > 0:
23403 OOTBuildDigScreen = Button(frame1, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
23404 OOTBuildDigScreen.grid(row=nextrow, column=0, sticky=W)
23405 nextrow = nextrow + 1
23407 if EnablePIODACMode > 0:
23408 OOTBuildDacScreen = Button(frame1, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
23409 OOTBuildDacScreen.grid(row=nextrow, column=0, sticky=W)
23410 nextrow = nextrow + 1
23411 if EnableMuxMode > 0:
23412 OOTBuildMuxScreen = Button(frame1, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
23413 OOTBuildMuxScreen.grid(row=nextrow, column=0, sticky=W)
23414 nextrow = nextrow + 1
23415 if EnableMinigenMode > 0:
23416 OOTBuildMinigenScreen = Button(frame1, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
23417 OOTBuildMinigenScreen.grid(row=nextrow, column=0, sticky=W)
23418 nextrow = nextrow + 1
23419 if EnablePmodDA1Mode > 0:
23420 OOTBuildDA1Screen = Button(frame1, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
23421 OOTBuildDA1Screen.grid(row=nextrow, column=0, sticky=W)
23422 nextrow = nextrow + 1
23423 if EnableDigPotMode >0:
23424 OOTBuildDigPotScreen = Button(frame1, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
23425 OOTBuildDigPotScreen.grid(row=nextrow, column=0, sticky=W)
23426 nextrow = nextrow + 1
23427 if EnableGenericSerialMode >0:
23428 OOTGenericSerialScreen = Button(frame1, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
23429 OOTGenericSerialScreen.grid(row=nextrow, column=0, sticky=W)
23430 nextrow = nextrow + 1
23431 if EnableAD5626SerialMode >0:
23432 OOTAD5626SerialScreen = Button(frame1, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
23433 OOTAD5626SerialScreen.grid(row=nextrow, column=0, sticky=W)
23434 nextrow = nextrow + 1
23435 if EnableDigitalFilter >0:
23436 OOTDigFiltScreen = Button(frame1, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
23437 OOTDigFiltScreen.grid(row=nextrow, column=0, sticky=W)
23438 nextrow = nextrow + 1
23439 if EnableCommandInterface > 0:
23440 OOTCommandLineScreen = Button(frame1, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
23441 OOTCommandLineScreen.grid(row=nextrow, column=0, sticky=W)
23442 nextrow = nextrow + 1
23443 if EnableMeasureScreen > 0:
23444 OOTMeasureScreen = Button(frame1, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
23445 OOTMeasureScreen.grid(row=nextrow, column=0, sticky=W)
23446 nextrow = nextrow + 1
23447 if EnableETSScreen > 0:
23448 OOTETSScreen = Button(frame1, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
23449 OOTETSScreen.grid(row=nextrow, column=0, sticky=W)
23450 nextrow = nextrow + 1
23452 OOTdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOOTwindow)
23453 OOTdismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
23456 global OOTwindow, OOTScreenStatus
23458 OOTScreenStatus.set(0)
23459 OOTwindow.destroy()
23463 TgInput = IntVar(0)
23464 SingleShot = IntVar(0)
23465 ManualTrigger = IntVar(0)
23466 AutoLevel = IntVar(0)
23467 ShowC1_V = IntVar(0)
23470 ShowC1_V = IntVar(0)
23471 ShowC1_I = IntVar(0)
23472 ShowC2_V = IntVar(0)
23473 ShowC2_I = IntVar(0)
23474 ShowAV_I = IntVar(0)
23475 ShowBV_I = IntVar(0)
23476 ShowRA_V = IntVar(0)
23477 ShowRA_I = IntVar(0)
23478 ShowRB_V = IntVar(0)
23479 ShowRB_I = IntVar(0)
23480 ShowMath = IntVar(0)
23481 ShowPB_A = IntVar(0)
23482 ShowPB_B = IntVar(0)
23483 ShowPB_C = IntVar(0)
23484 ShowPB_D = IntVar(0)
23486 ShowC1_VdB = IntVar(0)
23487 ShowC1_P = IntVar(0)
23488 ShowC2_VdB = IntVar(0)
23489 ShowC2_P = IntVar(0)
23490 ShowMarker = IntVar(0)
23491 ShowRA_VdB = IntVar(0)
23492 ShowRA_P = IntVar(0)
23493 ShowRB_VdB = IntVar(0)
23494 ShowRB_P = IntVar(0)
23495 ShowMathSA = IntVar(0)
23496 ShowRMath = IntVar(0)
23497 ShowAWGASA = IntVar(0)
23498 ShowAWGBSA = IntVar(0)
23499 HScaleBP = IntVar(0)
23502 Show_MathX = IntVar(0)
23503 Show_MathY = IntVar(0)
23504 AutoCenterA = IntVar(0)
23505 AutoCenterB = IntVar(0)
23506 SmoothCurves = IntVar(0)
23508 TRACEmodeTime = IntVar(0)
23509 TRACEmodeTime.set(0)
23510 DecimateOption = IntVar(0)
23511 MathTrace = IntVar(0)
23513 AWGAMode = IntVar(0)
23514 AWGAIOMode = IntVar(0)
23515 AWGATerm = IntVar(0)
23516 AWGAShape = IntVar(0)
23517 AWGAPhaseDelay = IntVar(0)
23518 AWGARepeatFlag = IntVar(0)
23519 AWGABurstFlag = IntVar(0)
23520 AWGBBurstFlag = IntVar(0)
23521 AWGBMode = IntVar(0)
23522 AWGBIOMode = IntVar(0)
23523 AWGBTerm = IntVar(0)
23524 AWGBShape = IntVar(0)
23525 AWGBPhaseDelay = IntVar(0)
23526 AWGBRepeatFlag = IntVar(0)
23529 AWGSync = IntVar(0)
23531 BisCompA = IntVar(0)
23534 MeasDCV1 = IntVar(0)
23535 MeasMinV1 = IntVar(0)
23536 MeasMaxV1 = IntVar(0)
23537 MeasMidV1 = IntVar(0)
23538 MeasPPV1 = IntVar(0)
23539 MeasRMSV1 = IntVar(0)
23540 MeasRMSVA_B = IntVar(0)
23541 MeasDCI1 = IntVar(0)
23542 MeasMinI1 = IntVar(0)
23543 MeasMaxI1 = IntVar(0)
23544 MeasMidI1 = IntVar(0)
23545 MeasPPI1 = IntVar(0)
23546 MeasRMSI1 = IntVar(0)
23547 MeasDiffAB = IntVar(0)
23548 MeasDCV2 = IntVar(0)
23549 MeasMinV2 = IntVar(0)
23550 MeasMaxV2 = IntVar(0)
23551 MeasMidV2 = IntVar(0)
23552 MeasPPV2 = IntVar(0)
23553 MeasRMSV2 = IntVar(0)
23554 MeasDCI2 = IntVar(0)
23555 MeasMinI2 = IntVar(0)
23556 MeasMaxI2 = IntVar(0)
23557 MeasMidI2 = IntVar(0)
23558 MeasPPI2 = IntVar(0)
23559 MeasRMSI2 = IntVar(0)
23560 MeasDiffBA = IntVar(0)
23561 MeasUserA = IntVar(0)
23562 MeasAHW = IntVar(0)
23563 MeasALW = IntVar(0)
23564 MeasADCy = IntVar(0)
23565 MeasAPER = IntVar(0)
23566 MeasAFREQ = IntVar(0)
23567 MeasBHW = IntVar(0)
23568 MeasBLW = IntVar(0)
23569 MeasBDCy = IntVar(0)
23570 MeasBPER = IntVar(0)
23571 MeasBFREQ = IntVar(0)
23572 MeasPhase = IntVar(0)
23573 MeasTopV1 = IntVar(0)
23574 MeasBaseV1 = IntVar(0)
23575 MeasTopV2 = IntVar(0)
23576 MeasBaseV2 = IntVar(0)
23577 MeasUserB = IntVar(0)
23578 MeasDelay = IntVar(0)
23579 TimeDisp = IntVar(0)
23582 FreqDisp = IntVar(0)
23583 PhADisp = IntVar(0)
23584 BodeDisp = IntVar(0)
23586 OhmDisp = IntVar(0)
23587 OOTScreenStatus = IntVar(0)
23588 OOTScreenStatus.set(0)
23589 PhAScreenStatus = IntVar(0)
23590 PhAScreenStatus.set(0)
23591 AppendPhAData = IntVar(0)
23592 AppendPhAData.set(0)
23593 PhAPlotMode = IntVar(0)
23594 PhADatafilename =
"PhaseData.csv"
23595 BodeScreenStatus = IntVar(0)
23596 BodeScreenStatus.set(0)
23597 DigScreenStatus = IntVar(0)
23598 DigScreenStatus.set(0)
23599 DacScreenStatus = IntVar(0)
23600 DacScreenStatus.set(0)
23601 MuxScreenStatus = IntVar(0)
23602 MuxScreenStatus.set(0)
23604 MuxSync = IntVar(0)
23605 DualMuxMode = IntVar(0)
23606 ChopMuxMode = IntVar(0)
23607 ChopTrig = IntVar(0)
23608 MinigenScreenStatus = IntVar(0)
23609 MinigenScreenStatus.set(0)
23610 DA1ScreenStatus = IntVar(0)
23611 DA1ScreenStatus.set(0)
23612 DigPotScreenStatus = IntVar(0)
23613 DigPotScreenStatus.set(0)
23614 GenericSerialStatus = IntVar(0)
23615 GenericSerialStatus.set(0)
23616 AD5626SerialStatus = IntVar(0)
23617 AD5626SerialStatus.set(0)
23618 DigFiltStatus = IntVar(0)
23619 DigFiltStatus.set(0)
23620 CommandStatus = IntVar(0)
23621 CommandStatus.set(0)
23622 MeasureStatus = IntVar(0)
23623 MeasureStatus.set(0)
23624 MarkerScale = IntVar(0)
23626 SettingsStatus = IntVar(0)
23627 CHA_RC_HP = IntVar(0)
23628 CHB_RC_HP = IntVar(0)
23629 CHAI_RC_HP = IntVar(0)
23630 CHBI_RC_HP = IntVar(0)
23632 SAVScale = IntVar(0)
23637 if GUITheme ==
"Light":
23638 FrameBG =
"#d7d7d7"
23639 ButtonText =
"#000000"
23640 elif GUITheme ==
"Dark":
23641 FrameBG =
"#484848"
23642 ButtonText =
"#ffffff"
23643 elif GUITheme ==
"Blue":
23644 FrameBG =
"#242468"
23645 ButtonText =
"#d0d0ff"
23646 elif GUITheme ==
"LtBlue":
23647 FrameBG =
"#c0e8ff"
23648 ButtonText =
"#000040"
23649 EntryText =
"#000000"
23650 BoxColor =
"#0000ff"
23651 root.style.configure(
"TFrame", background=FrameBG, borderwidth=BorderSize)
23652 root.style.configure(
"TLabelframe", background=FrameBG)
23653 root.style.configure(
"TLabel", foreground=ButtonText, background=FrameBG, relief=LabRelief)
23654 root.style.configure(
"TEntry", foreground=EntryText, background=FrameBG, relief=ButRelief)
23655 root.style.configure(
"TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
23656 root.style.configure(
"TRadiobutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
23657 root.style.configure(
"TButton", foreground=ButtonText, background=FrameBG, highlightcolor=FrameBG, relief=ButRelief)
23659 root.style.configure(
"TSpinbox", arrowsize=SBoxarrow)
23660 root.style.configure(
"W3.TButton", width=3, relief=ButRelief)
23661 root.style.configure(
"W4.TButton", width=4, relief=ButRelief)
23662 root.style.configure(
"W5.TButton", width=5, relief=ButRelief)
23663 root.style.configure(
"W6.TButton", width=6, relief=ButRelief)
23664 root.style.configure(
"W7.TButton", width=7, relief=ButRelief)
23665 root.style.configure(
"W8.TButton", width=8, relief=ButRelief)
23666 root.style.configure(
"W9.TButton", width=9, relief=ButRelief)
23667 root.style.configure(
"W10.TButton", width=10, relief=ButRelief)
23668 root.style.configure(
"W11.TButton", width=11, relief=ButRelief)
23669 root.style.configure(
"W16.TButton", width=16, relief=ButRelief)
23670 root.style.configure(
"W17.TButton", width=17, relief=ButRelief)
23671 root.style.configure(
"Stop.TButton", background=ButtonRed, foreground=
"#000000", width=4, relief=ButRelief)
23672 root.style.configure(
"Run.TButton", background=ButtonGreen, foreground=
"#000000", width=4, relief=ButRelief)
23673 root.style.configure(
"Pwr.TButton", background=ButtonGreen, foreground=
"#000000", width=8, relief=ButRelief)
23674 root.style.configure(
"PwrOff.TButton", background=ButtonRed, foreground=
"#000000", width=8, relief=ButRelief)
23675 root.style.configure(
"Roll.TButton", background=ButtonGreen, foreground=
"#000000", width=7, relief=ButRelief)
23676 root.style.configure(
"RollOff.TButton", background=ButtonRed, foreground=
"#000000", width=8, relief=ButRelief)
23677 root.style.configure(
"RConn.TButton", background=ButtonRed, foreground=
"#000000", width=5, relief=ButRelief)
23678 root.style.configure(
"GConn.TButton", background=ButtonGreen, foreground=
"#000000", width=5, relief=ButRelief)
23679 root.style.configure(
"Rtrace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=RAISED)
23680 root.style.configure(
"Strace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=SUNKEN)
23681 root.style.configure(
"Ctrace1.TButton", background=COLORtrace1, foreground=
"#000000", relief=ButRelief)
23682 root.style.configure(
"Rtrace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=RAISED)
23683 root.style.configure(
"Strace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=SUNKEN)
23684 root.style.configure(
"Ctrace2.TButton", background=COLORtrace2, foreground=
"#000000", relief=ButRelief)
23685 root.style.configure(
"Rtrace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=RAISED)
23686 root.style.configure(
"Strace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=SUNKEN)
23687 root.style.configure(
"Ctrace3.TButton", background=COLORtrace3, foreground=
"#000000", relief=ButRelief)
23688 root.style.configure(
"Rtrace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=RAISED)
23689 root.style.configure(
"Strace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=SUNKEN)
23690 root.style.configure(
"Ctrace4.TButton", background=COLORtrace4, foreground=
"#000000", relief=ButRelief)
23691 root.style.configure(
"Rtrace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=RAISED)
23692 root.style.configure(
"Strace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=SUNKEN)
23693 root.style.configure(
"Rtrace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=RAISED)
23694 root.style.configure(
"Strace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=SUNKEN)
23695 root.style.configure(
"RGray.TButton", background=
"#808080", width=7, relief=RAISED)
23696 root.style.configure(
"SGray.TButton", background=
"#808080", width=7, relief=SUNKEN)
23698 root.style.configure(
"A10T5.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR5, font=(
'Arial', 10,
'bold'))
23699 root.style.configure(
"A10T5.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23700 root.style.configure(
"A10T6.TLabelframe.Label", background=FrameBG, foreground=COLORtrace6, font=(
'Arial', 10,
'bold'))
23701 root.style.configure(
"A10T6.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23702 root.style.configure(
"A10T7.TLabelframe.Label", background=FrameBG, foreground=COLORtrace7, font=(
'Arial', 10,
'bold'))
23703 root.style.configure(
"A10T7.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23705 root.style.configure(
"A10R1.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR1, font=(
'Arial', 10,
'bold'))
23706 root.style.configure(
"A10R1.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23707 root.style.configure(
"A10R2.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR2, font=(
'Arial', 10,
'bold'))
23708 root.style.configure(
"A10R2.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23709 root.style.configure(
"A10.TLabelframe.Label", background=FrameBG, font=(
'Arial', 10,
'bold'))
23710 root.style.configure(
"A10.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
23711 root.style.configure(
"A10B.TLabel", foreground=ButtonText, font=
"Arial 10 bold")
23712 root.style.configure(
"A10R.TLabel", foreground=ButtonRed, font=
"Arial 10 bold")
23713 root.style.configure(
"A10G.TLabel", foreground=ButtonGreen, font=
"Arial 10 bold")
23714 root.style.configure(
"A12B.TLabel", foreground=ButtonText, font=
"Arial 12 bold")
23715 root.style.configure(
"A16B.TLabel", foreground=ButtonText, font=
"Arial 16 bold")
23716 root.style.configure(
"Stop.TRadiobutton", background=ButtonRed, indicatorcolor=FrameBG)
23717 root.style.configure(
"Run.TRadiobutton", background=ButtonGreen, indicatorcolor=FrameBG)
23718 root.style.configure(
"Disab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonRed)
23719 root.style.configure(
"Enab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonGreen)
23720 root.style.configure(
"Strace1.TCheckbutton", background=COLORtrace1, foreground=
"#000000", indicatorcolor=
"#ffffff")
23721 root.style.configure(
"Strace2.TCheckbutton", background=COLORtrace2, foreground=
"#000000", indicatorcolor=
"#ffffff")
23722 root.style.configure(
"Strace3.TCheckbutton", background=COLORtrace3, foreground=
"#000000", indicatorcolor=
"#ffffff")
23723 root.style.configure(
"Strace4.TCheckbutton", background=COLORtrace4, foreground=
"#000000", indicatorcolor=
"#ffffff")
23724 root.style.configure(
"Strace6.TCheckbutton", background=COLORtrace6, foreground=
"#000000", indicatorcolor=
"#ffffff")
23725 root.style.configure(
"Strace7.TCheckbutton", background=COLORtrace7, foreground=
"#000000", indicatorcolor=
"#ffffff")
23726 root.style.configure(
"WPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"white", indicatorcolor=(
"red",
"green"))
23727 root.style.configure(
"GPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"gray", indicatorcolor=(
"red",
"green"))
23729 frame2r = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23730 frame2r.pack(side=RIGHT, fill=BOTH, expand=NO)
23732 frame1 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23733 frame1.pack(side=TOP, fill=BOTH, expand=NO)
23735 frame2 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23736 frame2.pack(side=TOP, fill=BOTH, expand=YES)
23738 frame3 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
23739 frame3.pack(side=TOP, fill=BOTH, expand=NO)
23742 Triggermenu = Menubutton(frame1, text=
"Trigger", style=
"W7.TButton")
23743 Triggermenu.menu = Menu(Triggermenu, tearoff = 0 )
23744 Triggermenu[
"menu"] = Triggermenu.menu
23745 Triggermenu.menu.add_radiobutton(label=
'None', variable=TgInput, value=0)
23746 Triggermenu.menu.add_radiobutton(label=
'CA-V', variable=TgInput, value=1)
23747 Triggermenu.menu.add_radiobutton(label=
'CA-I', variable=TgInput, value=2)
23748 Triggermenu.menu.add_radiobutton(label=
'CB-V', variable=TgInput, value=3)
23749 Triggermenu.menu.add_radiobutton(label=
'CB-I', variable=TgInput, value=4)
23750 Triggermenu.menu.add_radiobutton(label=
'CA-V or CB-V', variable=TgInput, value=5)
23752 Triggermenu.menu.add_checkbutton(label=
'Auto Level', variable=AutoLevel)
23753 Triggermenu.menu.add_checkbutton(label=
'Low Pass Filter', variable=LPFTrigger)
23754 Triggermenu.menu.add_checkbutton(label=
'Manual Trgger', variable=ManualTrigger)
23755 Triggermenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShot)
23756 Triggermenu.pack(side=LEFT)
23758 Edgemenu = Menubutton(frame1, text=
"Edge", style=
"W5.TButton")
23759 Edgemenu.menu = Menu(Edgemenu, tearoff = 0 )
23760 Edgemenu[
"menu"] = Edgemenu.menu
23761 Edgemenu.menu.add_radiobutton(label=
'Rising (+)', variable=TgEdge, value=0)
23762 Edgemenu.menu.add_radiobutton(label=
'Falling (-)', variable=TgEdge, value=1)
23763 Edgemenu.pack(side=LEFT)
23765 tlab = Label(frame1, text=
"Trig Level")
23766 tlab.pack(side=LEFT)
23767 TRIGGERentry = Entry(frame1, width=5, cursor=
'double_arrow')
23768 TRIGGERentry.bind(
'<MouseWheel>', onTextScroll)
23769 TRIGGERentry.bind(
"<Button-4>", onTextScroll)
23770 TRIGGERentry.bind(
"<Button-5>", onTextScroll)
23771 TRIGGERentry.bind(
"<Return>", BTriglevel)
23772 TRIGGERentry.bind(
'<Key>', onTextKey)
23773 TRIGGERentry.pack(side=LEFT)
23774 TRIGGERentry.delete(0,
"end")
23775 TRIGGERentry.insert(0,0.0)
23777 tgb = Button(frame1, text=
"50%", style=
"W4.TButton", command=BTrigger50p)
23778 tgb.pack(side=LEFT)
23780 hldlab = Button(frame1, text=
"Hold Off", style=
"W8.TButton", command=IncHoldOff)
23781 hldlab.pack(side=LEFT)
23782 HoldOffentry = Entry(frame1, width=4, cursor=
'double_arrow')
23783 HoldOffentry.bind(
'<MouseWheel>', onTextScroll)
23784 HoldOffentry.bind(
"<Button-4>", onTextScroll)
23785 HoldOffentry.bind(
"<Button-5>", onTextScroll)
23786 HoldOffentry.bind(
"<Return>", BHoldOff)
23787 HoldOffentry.bind(
'<Key>', onTextKey)
23788 HoldOffentry.pack(side=LEFT)
23789 HoldOffentry.delete(0,
"end")
23790 HoldOffentry.insert(0,0.0)
23792 hozlab = Button(frame1, text=
"Horz Pos", style=
"W8.TButton", command=SetTriggerPoss)
23793 hozlab.pack(side=LEFT)
23794 HozPossentry = Entry(frame1, width=4, cursor=
'double_arrow')
23795 HozPossentry.bind(
'<MouseWheel>', onTextScroll)
23796 HozPossentry.bind(
"<Button-4>", onTextScroll)
23797 HozPossentry.bind(
"<Button-5>", onTextScroll)
23798 HozPossentry.bind(
"<Return>", BHozPoss)
23799 HozPossentry.bind(
'<Key>', onTextKey)
23800 HozPossentry.pack(side=LEFT)
23801 HozPossentry.delete(0,
"end")
23802 HozPossentry.insert(0,0.0)
23804 bexit = Button(frame1, text=
"Exit", style=
"W4.TButton", command=Bcloseexit)
23805 bexit.pack(side=RIGHT)
23806 bstop = Button(frame1, text=
"Stop", style=
"Stop.TButton", command=BStop)
23807 bstop.pack(side=RIGHT)
23808 brun = Button(frame1, text=
"Run", style=
"Run.TButton", command=BStart)
23809 brun.pack(side=RIGHT)
23810 PwrBt = Button(frame1, text=
"PWR-ON", style=
"Pwr.TButton", command=BPower)
23811 PwrBt.pack(side=RIGHT)
23813 if EnableScopeOnly == 0:
23814 Showmenu = Menubutton(frame1, text=
"Curves", style=
"W7.TButton")
23816 Showmenu = Menubutton(frame1, text=
"Traces", style=
"W7.TButton")
23817 Showmenu.menu = Menu(Showmenu, tearoff = 0 )
23818 Showmenu[
"menu"] = Showmenu.menu
23819 Showmenu.menu.add_command(label=
"-Show Traces-", foreground=
"blue", command=donothing)
23820 Showmenu.menu.add_command(label=
"All", command=BShowCurvesAll)
23821 Showmenu.menu.add_command(label=
"None", command=BShowCurvesNone)
23822 Showmenu.menu.add_checkbutton(label=
'CA-V (1)', background=COLORtrace1, variable=ShowC1_V, command=TraceSelectADC_Mux)
23823 Showmenu.menu.add_checkbutton(label=
'CA-I (3)', background=COLORtrace3, variable=ShowC1_I, command=TraceSelectADC_Mux)
23824 Showmenu.menu.add_checkbutton(label=
'CB-V (2)', background=COLORtrace2, variable=ShowC2_V, command=TraceSelectADC_Mux)
23825 Showmenu.menu.add_checkbutton(label=
'CB-I (4)', background=COLORtrace4,variable=ShowC2_I, command=TraceSelectADC_Mux)
23826 Showmenu.menu.add_checkbutton(label=
'Math-X', background=COLORtrace6, variable=Show_MathX, command=UpdateTimeTrace)
23827 Showmenu.menu.add_checkbutton(label=
'Math-Y', background=COLORtrace7, variable=Show_MathY, command=UpdateTimeTrace)
23828 Showmenu.menu.add_command(label=
"-Auto Vert Center-", foreground=
"blue", command=donothing)
23829 Showmenu.menu.add_checkbutton(label=
'Center CA-V', variable=AutoCenterA)
23830 Showmenu.menu.add_checkbutton(label=
'Center CB-V', variable=AutoCenterB)
23831 Showmenu.menu.add_command(label=
"-Input HP Comp-", foreground=
"blue", command=donothing)
23832 Showmenu.menu.add_checkbutton(label=
'Comp CA-V', variable=CHA_RC_HP)
23833 Showmenu.menu.add_checkbutton(label=
'Comp CB-V', variable=CHB_RC_HP)
23834 if EnableHSsampling > 0:
23835 Showmenu.menu.add_checkbutton(label=
'Comp CA-I', variable=CHAI_RC_HP)
23836 Showmenu.menu.add_checkbutton(label=
'Comp CB-I', variable=CHBI_RC_HP)
23837 Showmenu.menu.add_separator()
23838 Showmenu.menu.add_checkbutton(label=
'RA-V', background=COLORtraceR1, variable=ShowRA_V, command=UpdateTimeTrace)
23839 Showmenu.menu.add_checkbutton(label=
'RA-I', background=COLORtraceR3, variable=ShowRA_I, command=UpdateTimeTrace)
23840 Showmenu.menu.add_checkbutton(label=
'RB-V', background=COLORtraceR2, variable=ShowRB_V, command=UpdateTimeTrace)
23841 Showmenu.menu.add_checkbutton(label=
'RB-I', background=COLORtraceR4, variable=ShowRB_I, command=UpdateTimeTrace)
23842 Showmenu.menu.add_checkbutton(label=
'RMath', background=COLORtraceR5, variable=ShowMath, command=UpdateTimeTrace)
23843 Showmenu.menu.add_separator()
23844 Showmenu.menu.add_checkbutton(label=
'T Cursor (t)', variable=ShowTCur, command=UpdateTimeTrace)
23845 Showmenu.menu.add_checkbutton(label=
'V Cursor (v)', variable=ShowVCur, command=UpdateTimeTrace)
23846 Showmenu.pack(side=RIGHT)
23848 if ShowBallonHelp > 0:
23852 hldlab_tip =
CreateToolTip(hldlab,
'Increment Hold Off setting by one time division')
23853 hozlab_tip =
CreateToolTip(hozlab,
'When triggering, set trigger point to center of screen')
23861 if EnableHSsampling > 0:
23862 fminlab2 = Label(frame1, text=
"KHz")
23863 fminlab2.pack(side=RIGHT)
23864 FminEntry = Entry(frame1, width=6, cursor=
'double_arrow')
23865 FminEntry.bind(
'<MouseWheel>', onFminScroll)
23866 FminEntry.bind(
"<Button-4>", onFminScroll)
23867 FminEntry.bind(
"<Button-5>", onFminScroll)
23868 FminEntry.bind(
"<Return>", SetAD9833)
23869 FminEntry.pack(side=RIGHT)
23870 FminEntry.delete(0,
"end")
23871 FminEntry.insert(0,25)
23872 fminlab = Button(frame1, text=
"Fmin", style=
"W5.TButton", command=BSetFmin)
23873 fminlab.pack(side=RIGHT)
23875 HtMulEntry = Entry(frame1, width=4, cursor=
'double_arrow')
23876 HtMulEntry.bind(
'<MouseWheel>', onMulXScroll)
23877 HtMulEntry.bind(
"<Button-4>", onMulXScroll)
23878 HtMulEntry.bind(
"<Button-5>", onMulXScroll)
23879 HtMulEntry.bind(
"<Return>", SetAD9833)
23880 HtMulEntry.pack(side=RIGHT)
23881 HtMulEntry.delete(0,
"end")
23882 HtMulEntry.insert(0,1)
23883 mulxlab = Label( frame1, text =
"Mul X")
23884 mulxlab.pack(side=RIGHT)
23886 RollBt = Button(frame1, text=
"Roll-Off", style=
"RollOff.TButton", command=BRoll)
23887 RollBt.pack(side=RIGHT)
23890 TMsb = Spinbox(frame1, width=5, values= TMpdiv, cursor=
'double_arrow', command=BTime)
23891 TMsb.bind(
'<MouseWheel>', onSpinBoxScroll)
23892 TMsb.bind(
"<Button-4>", onSpinBoxScroll)
23893 TMsb.bind(
"<Button-5>", onSpinBoxScroll)
23894 TMsb.pack(side=RIGHT)
23895 TMsb.delete(0,
"end")
23897 TMlab = Label(frame1, text=
"Time mS/Div")
23898 TMlab.pack(side=RIGHT)
23900 ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas, cursor=
'cross')
23902 ca.bind(
'<Configure>', CAresize)
23903 ca.bind(
'<1>', onCanvasClickLeft)
23904 ca.bind(
'<3>', onCanvasClickRight)
23905 ca.bind(
"<Motion>",onCanvasMouse_xy)
23906 ca.bind(
"<Up>", onCanvasUpArrow)
23907 ca.bind(
"<Down>", onCanvasDownArrow)
23908 ca.bind(
"<Left>", onCanvasLeftArrow)
23909 ca.bind(
"<Right>", onCanvasRightArrow)
23910 ca.bind(
"<space>", onCanvasSpaceBar)
23911 ca.bind(
"1", onCanvasOne)
23912 ca.bind(
"2", onCanvasTwo)
23913 ca.bind(
"3", onCanvasThree)
23914 ca.bind(
"4", onCanvasFour)
23915 ca.bind(
"5", onCanvasFive)
23916 ca.bind(
"6", onCanvasSix)
23917 ca.bind(
"7", onCanvasSeven)
23918 ca.bind(
"8", onCanvasEight)
23919 ca.bind(
"9", onCanvasNine)
23920 ca.bind(
"0", onCanvasZero)
23921 ca.bind(
"a", onCanvasAverage)
23922 ca.bind(
"t", onCanvasShowTcur)
23923 ca.bind(
"v", onCanvasShowVcur)
23924 ca.bind(
"s", onCanvasSnap)
23925 ca.bind(
"+", onCanvasTrising)
23926 ca.bind(
"-", onCanvasTfalling)
23927 ca.bind(
'<MouseWheel>', onCanvasClickScroll)
23928 ca.bind(
"<Button-4>", onCanvasClickScroll)
23929 ca.bind(
"<Button-5>", onCanvasClickScroll)
23930 ca.pack(side=TOP, fill=BOTH, expand=YES)
23933 dropmenu = Frame( frame2r )
23934 dropmenu.pack(side=TOP)
23935 bcon = Button(dropmenu, text=
"Recon", style=
"RConn.TButton", command=ConnectDevice)
23936 bcon.pack(side=LEFT, anchor=W)
23938 Filemenu = Menubutton(dropmenu, text=
"File", style=
"W4.TButton")
23939 Filemenu.menu = Menu(Filemenu, tearoff = 0 )
23940 Filemenu[
"menu"] = Filemenu.menu
23941 Filemenu.menu.add_command(label=
"Save Config", command=BSaveConfigTime)
23942 Filemenu.menu.add_command(label=
"Load Config", command=BLoadConfigTime)
23943 Filemenu.menu.add_command(label=
"Run Script", command=RunScript)
23944 Filemenu.menu.add_command(label=
"Save Adj", command=BSaveCal)
23945 Filemenu.menu.add_command(label=
"Load Adj", command=BLoadCal)
23946 Filemenu.menu.add_command(label=
"Save Screen", command=BSaveScreen)
23947 Filemenu.menu.add_command(label=
"Save To CSV", command=BSaveData)
23948 Filemenu.menu.add_command(label=
"Load From CSV", command=BReadData)
23949 Filemenu.menu.add_command(label=
"Save PWL Data", command=BSaveChannelData)
23950 Filemenu.menu.add_command(label=
"Help", command=BHelp)
23951 Filemenu.menu.add_command(label=
"About", command=BAbout)
23952 Filemenu.pack(side=LEFT, anchor=W)
23954 Optionmenu = Menubutton(dropmenu, text=
"Options", style=
"W7.TButton")
23955 Optionmenu.menu = Menu(Optionmenu, tearoff = 0 )
23956 Optionmenu[
"menu"] = Optionmenu.menu
23957 Optionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
23958 Optionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
23959 Optionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurves, command=UpdateTimeTrace)
23960 Optionmenu.menu.add_checkbutton(label=
'Z-O-Hold', variable=ZOHold, command=UpdateTimeTrace)
23961 Optionmenu.menu.add_checkbutton(label=
'Decimate', variable=DecimateOption)
23962 Optionmenu.menu.add_checkbutton(label=
'Gated Meas', variable=MeasGateStatus)
23963 Optionmenu.menu.add_checkbutton(label=
'Trace Avg (a)', variable=TRACEmodeTime)
23964 Optionmenu.menu.add_checkbutton(label=
'Persistance', variable=ScreenTrefresh)
23965 Optionmenu.menu.add_command(label=
'Set Marker Location', command=BSetMarkerLocation)
23966 Optionmenu.menu.add_command(label=
'Change Plot Label', command=BUserCustomPlotText)
23967 Optionmenu.menu.add_command(label=
"SnapShot (s)", command=BSnapShot)
23968 Optionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
23969 Optionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
23970 Optionmenu.menu.add_command(label=
"Run Self Cal", command=SelfCalibration)
23971 if EnableScopeOnly != 0:
23972 Optionmenu.menu.add_command(label=
"Open Instruments", command=OpenOtherTools)
23973 if AllowFlashFirmware == 1:
23974 Optionmenu.menu.add_command(label=
"Save Cal Settings", command=Save_Cal_file)
23975 Optionmenu.menu.add_command(label=
"Update Firmware", command=UpdateFirmware)
23976 Optionmenu.pack(side=LEFT, anchor=W)
23978 dropmenu2 = Frame( frame2r )
23979 dropmenu2.pack(side=TOP)
23981 mathbt = Button(dropmenu2, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
23982 mathbt.pack(side=RIGHT, anchor=W)
23984 measlab = Label(dropmenu2, text=
"Meas")
23985 measlab.pack(side=LEFT, anchor=W)
23986 MeasmenuA = Menubutton(dropmenu2, text=
"CA", style=
"W3.TButton")
23987 MeasmenuA.menu = Menu(MeasmenuA, tearoff = 0 )
23988 MeasmenuA[
"menu"] = MeasmenuA.menu
23989 MeasmenuA.menu.add_command(label=
"-CA-V-", foreground=
"blue", command=donothing)
23990 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCV1)
23991 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinV1)
23992 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxV1)
23993 MeasmenuA.menu.add_checkbutton(label=
'Base', variable=MeasBaseV1)
23994 MeasmenuA.menu.add_checkbutton(label=
'Top', variable=MeasTopV1)
23995 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidV1)
23996 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPV1)
23997 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV1)
23998 MeasmenuA.menu.add_checkbutton(label=
'CA-CB', variable=MeasDiffAB)
23999 MeasmenuA.menu.add_checkbutton(label=
'CA-CB RMS', variable=MeasRMSVA_B)
24000 MeasmenuA.menu.add_checkbutton(label=
'User', variable=MeasUserA, command=BUserAMeas)
24002 MeasmenuA.menu.add_command(label=
"-CA-I-", foreground=
"blue", command=donothing)
24003 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCI1)
24004 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinI1)
24005 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxI1)
24006 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidI1)
24007 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPI1)
24008 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI1)
24010 MeasmenuA.menu.add_command(label=
"-CA-Time-", foreground=
"blue", command=donothing)
24011 MeasmenuA.menu.add_checkbutton(label=
'H-Width', variable=MeasAHW)
24012 MeasmenuA.menu.add_checkbutton(label=
'L-Width', variable=MeasALW)
24013 MeasmenuA.menu.add_checkbutton(label=
'DutyCyle', variable=MeasADCy)
24014 MeasmenuA.menu.add_checkbutton(label=
'Period', variable=MeasAPER)
24015 MeasmenuA.menu.add_checkbutton(label=
'Freq', variable=MeasAFREQ)
24016 MeasmenuA.menu.add_checkbutton(label=
'A-B Phase', variable=MeasPhase)
24018 MeasmenuA.pack(side=LEFT)
24020 MeasmenuB = Menubutton(dropmenu2, text=
"CB", style=
"W3.TButton")
24021 MeasmenuB.menu = Menu(MeasmenuB, tearoff = 0 )
24022 MeasmenuB[
"menu"] = MeasmenuB.menu
24023 MeasmenuB.menu.add_command(label=
"-CB-V-", foreground=
"blue", command=donothing)
24024 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCV2)
24025 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinV2)
24026 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxV2)
24027 MeasmenuB.menu.add_checkbutton(label=
'Base', variable=MeasBaseV2)
24028 MeasmenuB.menu.add_checkbutton(label=
'Top', variable=MeasTopV2)
24029 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidV2)
24030 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPV2)
24031 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV2)
24032 MeasmenuB.menu.add_checkbutton(label=
'CB-CA', variable=MeasDiffBA)
24033 MeasmenuB.menu.add_checkbutton(label=
'User', variable=MeasUserB, command=BUserBMeas)
24035 MeasmenuB.menu.add_command(label=
"-CB-I-", foreground=
"blue", command=donothing)
24036 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCI2)
24037 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinI2)
24038 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxI2)
24039 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidI2)
24040 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPI2)
24041 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI2)
24043 MeasmenuB.menu.add_command(label=
"-CB-Time-", foreground=
"blue", command=donothing)
24044 MeasmenuB.menu.add_checkbutton(label=
'H-Width', variable=MeasBHW)
24045 MeasmenuB.menu.add_checkbutton(label=
'L-Width', variable=MeasBLW)
24046 MeasmenuB.menu.add_checkbutton(label=
'DutyCyle', variable=MeasBDCy)
24047 MeasmenuB.menu.add_checkbutton(label=
'Period', variable=MeasBPER)
24048 MeasmenuB.menu.add_checkbutton(label=
'Freq', variable=MeasBFREQ)
24049 MeasmenuB.menu.add_checkbutton(label=
'B-A Delay', variable=MeasDelay)
24050 MeasmenuB.pack(side=LEFT)
24051 if ShowBallonHelp > 0:
24056 DigScreenStatus = IntVar(0)
24057 DigScreenStatus.set(0)
24059 if EnableScopeOnly == 0:
24060 BuildAWGScreen = Button(frame2r, text=
"AWG Window", style=
"W16.TButton", command=MakeAWGWindow)
24061 BuildAWGScreen.pack(side=TOP)
24063 timebtn = Frame( frame2r )
24064 timebtn.pack(side=TOP)
24065 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
24066 ckb1.pack(side=LEFT)
24067 timelab = Label(timebtn, text=
"Time Plot")
24068 timelab.pack(side=LEFT)
24069 if EnableXYPlotter > 0:
24070 xybtn = Frame( frame2r )
24071 xybtn.pack(side=TOP)
24072 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
24073 ckb2.pack(side=LEFT)
24074 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
24075 BuildXYScreen.pack(side=TOP)
24077 if EnablePhaseAnalizer > 0:
24078 phasebtn = Frame( frame2r )
24079 phasebtn.pack(side=TOP)
24080 phckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
24081 phckb.pack(side=LEFT)
24082 BuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
24083 BuildPhAScreen.pack(side=LEFT)
24085 if EnableSpectrumAnalizer > 0:
24086 freqbtn = Frame( frame2r )
24087 freqbtn.pack(side=TOP)
24088 ckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
24089 ckb3.pack(side=LEFT)
24090 BuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
24091 BuildSpectrumScreen.pack(side=LEFT)
24093 if EnableBodePlotter > 0:
24094 bodebtn = Frame( frame2r )
24095 bodebtn.pack(side=TOP)
24096 ckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
24097 ckb5.pack(side=LEFT)
24098 BuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
24099 BuildBodeScreen.pack(side=LEFT)
24101 if EnableImpedanceAnalizer > 0:
24102 impdbtn = Frame( frame2r )
24103 impdbtn.pack(side=TOP)
24104 ckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
24105 ckb4.pack(side=LEFT)
24106 BuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
24107 BuildIAScreen.pack(side=LEFT)
24109 if EnableOhmMeter > 0:
24110 dcohmbtn = Frame( frame2r )
24111 dcohmbtn.pack(side=TOP)
24112 ckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
24113 ckb6.pack(side=LEFT)
24114 BuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
24115 BuildOhmScreen.pack(side=LEFT)
24117 if ShowTraceControls > 0:
24118 Labelfonttext =
"Arial " + str(FontSize) +
" bold"
24119 tracelab = Label(frame2r, text=
"Traces", font= Labelfonttext)
24120 tracelab.pack(side=TOP)
24121 trctrla = Frame( frame2r )
24122 trctrla.pack(side=TOP)
24123 ckbt1 = Checkbutton(trctrla, text=
'CA-V (1)', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
24124 ckbt1.pack(side=LEFT,fill=X)
24125 ckbt2 = Checkbutton(trctrla, text=
'CA-I (3)', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
24126 ckbt2.pack(side=LEFT,fill=X)
24127 trctrlb = Frame( frame2r )
24128 trctrlb.pack(side=TOP)
24129 ckbt3 = Checkbutton(trctrlb, text=
'CB-V (2)', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
24130 ckbt3.pack(side=LEFT,fill=X)
24131 ckbt4 = Checkbutton(trctrlb, text=
'CB-I (4)', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
24132 ckbt4.pack(side=LEFT,fill=X)
24134 if ShowBallonHelp > 0:
24148 BuildSpectrumScreen_tip =
CreateToolTip(BuildSpectrumScreen,
'Open Spectrum Analyzer window')
24164 if EnableDigIO > 0:
24165 BuildDigScreen = Button(frame2r, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
24166 BuildDigScreen.pack(side=TOP)
24168 if EnablePIODACMode > 0:
24169 BuildDacScreen = Button(frame2r, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
24170 BuildDacScreen.pack(side=TOP)
24171 if EnableMuxMode > 0:
24172 BuildMuxScreen = Button(frame2r, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
24173 BuildMuxScreen.pack(side=TOP)
24174 if EnableMinigenMode > 0:
24175 BuildMinigenScreen = Button(frame2r, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
24176 BuildMinigenScreen.pack(side=TOP)
24177 if EnablePmodDA1Mode > 0:
24178 BuildDA1Screen = Button(frame2r, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
24179 BuildDA1Screen.pack(side=TOP)
24180 if EnableDigPotMode >0:
24181 BuildDigPotScreen = Button(frame2r, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
24182 BuildDigPotScreen.pack(side=TOP)
24183 if EnableGenericSerialMode >0:
24184 GenericSerialScreen = Button(frame2r, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
24185 GenericSerialScreen.pack(side=TOP)
24186 if EnableAD5626SerialMode >0:
24187 AD5626SerialScreen = Button(frame2r, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
24188 AD5626SerialScreen.pack(side=TOP)
24189 if EnableDigitalFilter >0:
24190 DigFiltScreen = Button(frame2r, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
24191 DigFiltScreen.pack(side=TOP)
24192 if EnableCommandInterface > 0:
24193 CommandLineScreen = Button(frame2r, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
24194 CommandLineScreen.pack(side=TOP)
24195 if EnableMeasureScreen > 0:
24196 MeasureScreen = Button(frame2r, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
24197 MeasureScreen.pack(side=TOP)
24198 if EnableETSScreen > 0:
24199 ETSScreen = Button(frame2r, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
24200 ETSScreen.pack(side=TOP)
24203 if EnableXYPlotter > 0:
24204 xybtn = Frame( frame2r )
24205 xybtn.pack(side=TOP)
24206 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
24207 ckb2.pack(side=LEFT)
24208 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
24209 BuildXYScreen.pack(side=TOP)
24211 if ShowTraceControls > 0:
24212 Labelfonttext =
"Arial " + str(FontSize) +
" bold"
24213 tracelab = Label(frame2r, text=
"Traces", font= Labelfonttext)
24214 tracelab.pack(side=TOP)
24215 trctrla = Frame( frame2r )
24216 trctrla.pack(side=TOP)
24217 ckbt1 = Checkbutton(trctrla, text=
'CA-V (1)', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
24218 ckbt1.pack(side=LEFT,fill=X)
24219 ckbt2 = Checkbutton(trctrla, text=
'CA-I (3)', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
24220 ckbt2.pack(side=LEFT,fill=X)
24221 trctrlb = Frame( frame2r )
24222 trctrlb.pack(side=TOP)
24223 ckbt3 = Checkbutton(trctrlb, text=
'CB-V (2)', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
24224 ckbt3.pack(side=LEFT,fill=X)
24225 ckbt4 = Checkbutton(trctrlb, text=
'CB-I (4)', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
24226 ckbt4.pack(side=LEFT,fill=X)
24228 awg1eb = Frame( frame2r )
24229 awg1eb.pack(side=TOP)
24230 ModeAMenu = Menubutton(awg1eb, text=
"Mode", width=5, style=
"Ctrace1.TButton")
24231 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
24232 ModeAMenu[
"menu"] = ModeAMenu.menu
24233 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
24234 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
24235 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
24236 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
24237 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
24238 ModeAMenu.menu.add_separator()
24239 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
24240 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
24241 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
24242 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
24243 ModeAMenu.pack(side=LEFT, anchor=W)
24244 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", width=6, style=
"Ctrace1.TButton")
24245 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
24246 ShapeAMenu[
"menu"] = ShapeAMenu.menu
24247 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
24248 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
24249 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
24250 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
24251 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
24252 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
24253 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
24254 if AWGShowAdvanced.get() > 0:
24255 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
24256 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
24257 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
24258 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
24259 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
24260 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
24261 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
24262 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
24263 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
24264 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
24265 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
24266 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
24267 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
24268 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
24270 ShapeAMenu.menu.add_separator()
24271 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
24272 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
24273 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
24274 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
24275 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
24276 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
24277 ShapeAMenu.pack(side=LEFT, anchor=W)
24279 awg1model = Frame( frame2r )
24280 awg1model.pack(side=TOP,fill=X)
24281 AWGAModeLabel = Label(awg1model, text=
"AWG A Mode", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
24282 AWGAModeLabel.pack(side=LEFT, fill=X)
24283 AWGAShapeLabel = Label(awg1model, text=
"AWG A Shape", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
24284 AWGAShapeLabel.pack(side=LEFT, fill=X)
24286 awg1ampl = Frame( frame2r )
24287 awg1ampl.pack(side=TOP,fill=X)
24288 amp1lab = Label(awg1ampl)
24289 amp1lab.grid(row=0,column=0,sticky=E+S+N+W)
24290 off1lab = Label(awg1ampl)
24291 off1lab.grid(row=0,column=1,sticky=E+S+N+W)
24292 freq1lab = Label(awg1ampl, text=
"Freq")
24293 freq1lab.grid(row=0,column=2,sticky=E+S+N+W)
24295 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
24296 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
24297 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
24298 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
24299 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
24300 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
24301 AWGAAmplEntry.grid(row=1,column=0,sticky=E+S+N+W)
24302 AWGAAmplEntry.delete(0,
"end")
24303 AWGAAmplEntry.insert(0,0.0)
24305 AWGAOffsetEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
24306 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
24307 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
24308 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
24309 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
24310 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
24311 AWGAOffsetEntry.grid(row=1,column=1,sticky=E+S+N+W)
24312 AWGAOffsetEntry.delete(0,
"end")
24313 AWGAOffsetEntry.insert(0,0.0)
24315 if AWG_Amp_Mode.get() == 0:
24316 amp1lab.config(text =
"Min" )
24317 off1lab.config(text =
"Max" )
24319 amp1lab.config(text =
"Amp" )
24320 off1lab.config(text =
"Off" )
24322 AWGAFreqEntry = Entry(awg1ampl, width=7, cursor=
'double_arrow')
24323 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
24324 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
24325 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
24326 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
24327 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
24328 AWGAFreqEntry.grid(row=1,column=2,sticky=E+S+N+W)
24329 AWGAFreqEntry.delete(0,
"end")
24330 AWGAFreqEntry.insert(0,100.0)
24333 awg1phase = Frame( frame2r )
24334 awg1phase.pack(side=TOP)
24335 awgaph = Button(awg1phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGAPhaseDelay)
24336 awgaph.pack(side=LEFT, anchor=W)
24337 AWGAPhaseEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
24338 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
24339 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
24340 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
24341 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
24342 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
24343 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
24344 AWGAPhaseEntry.delete(0,
"end")
24345 AWGAPhaseEntry.insert(0,0)
24346 phasealab = Label(awg1phase, text=
"Deg")
24347 phasealab.pack(side=LEFT, anchor=W)
24349 awg1dc = Frame( frame2r )
24350 awg1dc.pack(side=TOP)
24351 AWGADutyCycleEntry = Entry(awg1dc, width=5, cursor=
'double_arrow')
24352 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
24353 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
24354 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
24355 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
24356 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
24357 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
24358 AWGADutyCycleEntry.delete(0,
"end")
24359 AWGADutyCycleEntry.insert(0,50)
24360 duty1lab = Label(awg1dc, text=
"%")
24361 duty1lab.pack(side=LEFT, anchor=W)
24375 awg2eb = Frame( frame2r )
24376 awg2eb.pack(side=TOP)
24377 ModeBMenu = Menubutton(awg2eb, text=
"Mode", width=5, style=
"Ctrace2.TButton")
24378 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
24379 ModeBMenu[
"menu"] = ModeBMenu.menu
24380 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
24381 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
24382 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
24383 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
24384 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
24385 ModeBMenu.menu.add_separator()
24386 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
24387 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
24388 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
24389 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
24390 ModeBMenu.pack(side=LEFT, anchor=W)
24391 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", width=6, style=
"Ctrace2.TButton")
24392 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
24393 ShapeBMenu[
"menu"] = ShapeBMenu.menu
24394 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
24395 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
24396 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
24397 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
24398 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
24399 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
24400 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
24401 if AWGShowAdvanced.get() > 0:
24402 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
24403 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
24404 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
24405 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
24406 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
24407 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
24408 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
24409 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
24410 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
24411 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
24412 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
24413 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
24415 ShapeBMenu.menu.add_separator()
24416 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
24417 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
24418 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
24419 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
24420 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
24421 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
24422 ShapeBMenu.pack(side=LEFT, anchor=W)
24424 awg2model = Frame( frame2r )
24425 awg2model.pack(side=TOP,fill=X)
24426 AWGBModeLabel = Label(awg2model, text=
"AWG B Mode", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
24427 AWGBModeLabel.pack(side=LEFT, fill=X)
24428 AWGBShapeLabel = Label(awg2model, text=
"AWG B Shape", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
24429 AWGBShapeLabel.pack(side=LEFT, fill=X)
24431 awg2ampl = Frame( frame2r )
24432 awg2ampl.pack(side=TOP)
24433 amp2lab = Label(awg2ampl)
24434 amp2lab.grid(row=0,column=0,sticky=E+S+N+W)
24436 off2lab = Label(awg2ampl)
24437 off2lab.grid(row=0,column=1,sticky=E+S+N+W)
24439 freq2lab = Label(awg2ampl, text=
"Freq")
24440 freq2lab.grid(row=0,column=2,sticky=E+S+N+W)
24443 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
24444 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
24445 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
24446 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
24447 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
24448 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
24449 AWGBAmplEntry.grid(row=1,column=0,sticky=E+S+N+W)
24450 AWGBAmplEntry.delete(0,
"end")
24451 AWGBAmplEntry.insert(0,0.0)
24453 AWGBOffsetEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
24454 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
24455 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
24456 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
24457 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
24458 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
24459 AWGBOffsetEntry.grid(row=1,column=1,sticky=E+S+N+W)
24460 AWGBOffsetEntry.delete(0,
"end")
24461 AWGBOffsetEntry.insert(0,0.0)
24463 if AWG_Amp_Mode.get() == 0:
24464 amp2lab.config(text =
"Min" )
24465 off2lab.config(text =
"Max" )
24467 amp2lab.config(text =
"Amp" )
24468 off2lab.config(text =
"Off" )
24470 AWGBFreqEntry = Entry(awg2ampl, width=7, cursor=
'double_arrow')
24471 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
24472 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
24473 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
24474 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
24475 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
24476 AWGBFreqEntry.grid(row=1,column=2,sticky=E+S+N+W)
24477 AWGBFreqEntry.delete(0,
"end")
24478 AWGBFreqEntry.insert(0,100.0)
24481 awg2phase = Frame( frame2r )
24482 awg2phase.pack(side=TOP)
24483 awgbph = Button(awg2phase, text=
"Phase", style=
"W5.TButton", command=ToggleAWGBPhaseDelay)
24484 awgbph.pack(side=LEFT, anchor=W)
24485 AWGBPhaseEntry = Entry(awg2phase, width=5, cursor=
'double_arrow')
24486 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
24487 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
24488 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
24489 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
24490 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
24491 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
24492 AWGBPhaseEntry.delete(0,
"end")
24493 AWGBPhaseEntry.insert(0,0)
24494 phaseblab = Label(awg2phase, text=
"Deg")
24495 phaseblab.pack(side=LEFT, anchor=W)
24497 awg2dc = Frame( frame2r )
24498 awg2dc.pack(side=TOP)
24499 AWGBDutyCycleEntry = Entry(awg2dc, width=5, cursor=
'double_arrow')
24500 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
24501 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
24502 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
24503 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
24504 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
24505 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
24506 AWGBDutyCycleEntry.delete(0,
"end")
24507 AWGBDutyCycleEntry.insert(0,50)
24508 duty2lab = Label(awg2dc, text=
"%")
24509 duty2lab.pack(side=LEFT, anchor=W)
24511 bcompa = Checkbutton(frame2r, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
24512 bcompa.pack(side=TOP)
24514 awgsync = Checkbutton(frame2r, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
24515 awgsync.pack(side=TOP)
24516 if ShowBallonHelp > 0:
24519 BuildAWGSync_tip =
CreateToolTip(awgsync,
'Toggle between continuous and discontinuous modes')
24527 prlab = Label(frame2r, text=
"Adjust Gain / Offset")
24528 prlab.pack(side=TOP)
24530 ProbeA = Frame( frame2r )
24531 ProbeA.pack(side=TOP)
24532 gain1lab = Button(ProbeA, text=
"CA-V", width=4, style=
"Ctrace1.TButton", command=ReSetAGO)
24533 gain1lab.pack(side=LEFT,fill=X)
24534 CHAVGainEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
24535 CHAVGainEntry.bind(
'<Return>', onTextKey)
24536 CHAVGainEntry.bind(
'<MouseWheel>', onTextScroll)
24537 CHAVGainEntry.bind(
"<Button-4>", onTextScroll)
24538 CHAVGainEntry.bind(
"<Button-5>", onTextScroll)
24539 CHAVGainEntry.bind(
'<Key>', onTextKey)
24540 CHAVGainEntry.pack(side=LEFT)
24541 CHAVGainEntry.delete(0,
"end")
24542 CHAVGainEntry.insert(0,1.0)
24543 CHAVOffsetEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
24544 CHAVOffsetEntry.bind(
'<Return>', onTextKey)
24545 CHAVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24546 CHAVOffsetEntry.bind(
"<Button-4>", onTextScroll)
24547 CHAVOffsetEntry.bind(
"<Button-5>", onTextScroll)
24548 CHAVOffsetEntry.bind(
'<Key>', onTextKey)
24549 CHAVOffsetEntry.pack(side=LEFT)
24550 CHAVOffsetEntry.delete(0,
"end")
24551 CHAVOffsetEntry.insert(0,0.0)
24553 ProbeB = Frame( frame2r )
24554 ProbeB.pack(side=TOP)
24555 gain2lab = Button(ProbeB, text=
"CB-V", width=4, style=
"Ctrace2.TButton", command=ReSetBGO)
24556 gain2lab.pack(side=LEFT,fill=X)
24557 CHBVGainEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
24558 CHBVGainEntry.bind(
'<Return>', onTextKey)
24559 CHBVGainEntry.bind(
'<MouseWheel>', onTextScroll)
24560 CHBVGainEntry.bind(
"<Button-4>", onTextScroll)
24561 CHBVGainEntry.bind(
"<Button-5>", onTextScroll)
24562 CHBVGainEntry.bind(
'<Key>', onTextKey)
24563 CHBVGainEntry.pack(side=LEFT)
24564 CHBVGainEntry.delete(0,
"end")
24565 CHBVGainEntry.insert(0,1.0)
24566 CHBVOffsetEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
24567 CHBVOffsetEntry.bind(
'<Return>', onTextKey)
24568 CHBVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24569 CHBVOffsetEntry.bind(
"<Button-4>", onTextScroll)
24570 CHBVOffsetEntry.bind(
"<Button-5>", onTextScroll)
24571 CHBVOffsetEntry.bind(
'<Key>', onTextKey)
24572 CHBVOffsetEntry.pack(side=LEFT)
24573 CHBVOffsetEntry.delete(0,
"end")
24574 CHBVOffsetEntry.insert(0,0.0)
24576 ProbeAI = Frame( frame2r )
24577 ProbeAI.pack(side=TOP)
24578 gainailab = Button(ProbeAI, text=
"CA-I", width=4, style=
"Ctrace3.TButton", command=ReSetAIGO)
24579 gainailab.pack(side=LEFT,fill=X)
24580 CHAIGainEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
24581 CHAIGainEntry.bind(
'<Return>', onTextKey)
24582 CHAIGainEntry.bind(
'<MouseWheel>', onTextScroll)
24583 CHAIGainEntry.bind(
"<Button-4>", onTextScroll)
24584 CHAIGainEntry.bind(
"<Button-5>", onTextScroll)
24585 CHAIGainEntry.bind(
'<Key>', onTextKey)
24586 CHAIGainEntry.pack(side=LEFT)
24587 CHAIGainEntry.delete(0,
"end")
24588 CHAIGainEntry.insert(0,1.0)
24589 CHAIOffsetEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
24590 CHAIOffsetEntry.bind(
'<Return>', onTextKey)
24591 CHAIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24592 CHAIOffsetEntry.bind(
"<Button-4>", onTextScroll)
24593 CHAIOffsetEntry.bind(
"<Button-5>", onTextScroll)
24594 CHAIOffsetEntry.bind(
'<Key>', onTextKey)
24595 CHAIOffsetEntry.pack(side=LEFT)
24596 CHAIOffsetEntry.delete(0,
"end")
24597 CHAIOffsetEntry.insert(0,0.0)
24599 ProbeBI = Frame( frame2r )
24600 ProbeBI.pack(side=TOP)
24601 gainbilab = Button(ProbeBI, text=
"CB-I", width=4, style=
"Ctrace4.TButton", command=ReSetBIGO)
24602 gainbilab.pack(side=LEFT,fill=X)
24603 CHBIGainEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
24604 CHBIGainEntry.bind(
'<Return>', onTextKey)
24605 CHBIGainEntry.bind(
'<MouseWheel>', onTextScroll)
24606 CHBIGainEntry.bind(
"<Button-4>", onTextScroll)
24607 CHBIGainEntry.bind(
"<Button-5>", onTextScroll)
24608 CHBIGainEntry.bind(
'<Key>', onTextKey)
24609 CHBIGainEntry.pack(side=LEFT)
24610 CHBIGainEntry.delete(0,
"end")
24611 CHBIGainEntry.insert(0,1.0)
24612 CHBIOffsetEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
24613 CHBIOffsetEntry.bind(
'<Return>', onTextKey)
24614 CHBIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
24615 CHBIOffsetEntry.bind(
"<Button-4>", onTextScroll)
24616 CHBIOffsetEntry.bind(
"<Button-5>", onTextScroll)
24617 CHBIOffsetEntry.bind(
'<Key>', onTextKey)
24618 CHBIOffsetEntry.pack(side=LEFT)
24619 CHBIOffsetEntry.delete(0,
"end")
24620 CHBIOffsetEntry.insert(0,0.0)
24622 if EnableUserEntries > 0:
24623 UserEnt = Frame( frame2r )
24624 UserEnt.pack(side=TOP)
24625 userentlab = Button(UserEnt, text=
"User", width=4, style=
"W4.TButton")
24626 userentlab.pack(side=LEFT,fill=X)
24627 User1Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
24628 User1Entry.bind(
'<Return>', onTextKey)
24629 User1Entry.bind(
'<MouseWheel>', onTextScroll)
24630 User1Entry.bind(
"<Button-4>", onTextScroll)
24631 User1Entry.bind(
"<Button-5>", onTextScroll)
24632 User1Entry.bind(
'<Key>', onTextKey)
24633 User1Entry.pack(side=LEFT)
24634 User1Entry.delete(0,
"end")
24635 User1Entry.insert(0,0.0)
24636 User2Entry = Entry(UserEnt, width=5, cursor=
'double_arrow')
24637 User2Entry.bind(
'<Return>', onTextKey)
24638 User2Entry.bind(
'<MouseWheel>', onTextScroll)
24639 User2Entry.bind(
"<Button-4>", onTextScroll)
24640 User2Entry.bind(
"<Button-5>", onTextScroll)
24641 User2Entry.bind(
'<Key>', onTextKey)
24642 User2Entry.pack(side=LEFT)
24643 User2Entry.delete(0,
"end")
24644 User2Entry.insert(0,0.0)
24647 R0lGODlhdAAxAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
24648 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
24649 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
24650 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
24651 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
24652 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
24653 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
24654 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
24655 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
24656 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
24657 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
24658 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
24659 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
24660 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAB0ADEA
24661 AAj/AP8JHEiwoMGDCBMqXMiwocOHEBlSS5WKIUWJfqj9S+XnokGPEUOKdEito0WNCC9OpEbtz7+V
24662 HyuOnEnzI6yMEylWpNgx50aOGkt6LElUoB9VPFHyTAXrYipVNaOSTOWzEEuqA61SXTnxH06ZK7EK
24663 5Ap2J9WdKKWqRVjyJ1c/1ZbqvPnyrKqS215mzEiwo8yfer22XUs4Zse9V31mPFuxbdKxjAU65Si5
24664 8Vm+hTNXrvuWKFKdjs8WJEqR5V63bkP/1bx28E+rK28ihckRayHQnH/yVdUTMtB/1fywHj7TI0iR
24665 x4krd7g0bcjSy6NLn069uvXr2LNr3/6Sip/vU777//EOXjx5P+G/nw/vnCA18gXFOy+JWfL31V6/
24666 s001ZQqK8AdN1B8KJiVETX9TMIGggv0xmOCCEDbYX3sDoTdhXwi6199qFjJRUIMB3iEhgs7x56CC
24667 wrH134r+tcjiiy7G+B+FL7nIYYsp1ojCX9SwuFqLBh343xQc+bGiUjhyhCNbLTbR4oBTODlkk09S
24668 iQKNBz7Z139OotQjkQPxx2WO/3D5kZNUDDSRk8IJOUVabqoo45ww1tkijejt+N9fUM64kX9/GQne
24669 lQMBWdCRGs6Yyp4FFYllhIVM6aCkCFL65kGAHshEjhZa2NiGAlWzJzUK8pngaAmSKVAh/fHWX0Rf
24670 sv+oSnB01iprkIwOWKF//wzIEqBG8drrf4USS9CiYBYEy39/GCrQHzpZFWCVhOoFpZSVRkktheg1
24671 MRaoXhGLbEaM9tpEinmiNGSj4CaaipNTqKltuaPBOF+ftt6JKgpUnGUoFcIaGR6wX371X4rOjnXw
24672 R3tSYexLL+L37YgUmhjhgxSjijHGGln4rYMVoXdihr2eqiETdxhEooUUtuuevQEiayeL7eU5p3B5
24673 ZmXjsHRWlLBAWgA7ULME/rPsqxjuOC2X/tE4VrfUztuef6oCKXDSRBb8MoBc6gSalD1BDVW4E5rW
24674 osQQx+i0mgLbOd/CSWeJwtY7pvvhjLWmDWOOJc3/jHaWHDckd4TOsawxePEeuyGJ7O44opbWDukH
24675 LB8hOGFtAcI4dkNEx7g5d+6xtBBLa8s7ZbUk/XF66aBLFau+D/GntntbwdQo6bXnHmTu83FFO+6k
24676 wxm8QoAzyDrbI186UPIF/vk4in6UStA2DKaC4q4OKp98qsFmnPnsC21jM8zF3izZzB1RTRDRfrBa
24677 dMl1alSrcPgOmVeQVpYuYNRSOtf/RFDbSaaCJzop9cVJFOkPzs6mF3iVjEheo0qzmvAHpcCtXuA7
24678 iJjy5ZyE2Wwi9IpPub4ULzFlhIFP25P6DCKwzQlJVRML3EEstDFLOYdBH7qcyxQ3hUJIJkE7ORip
24679 /5CmptJcEENMQNv3bkW7mc3pcz8bl8xilKN1ka0i7HMfDMsHo42wqIdiWVqlSmSlbGHLVwTRleII
24680 tMFrccpPVnxXeGSnxH+csUk/tFJ96Aa7kuTLbWl82PnmKLn06OeHOxKTTExowoTgCD3i6UvbVqix
24681 wMlue5i80PKIuKoN0VEhCJLd2KzHnushxJSjuySFXnewP3IwkIkrH0WYpRCBkewfWnSTc1TRyvfF
24682 RwuqEtgqy3gt/hkTdXYUVl0cqEiFyE5ozlugL+GXpS32pwkdjNIqncjNWnXwYBZaEVSm+CIyQekv
24683 jYTffaDkpjqpzpOym6a8HmepKk2KcAS5J+OcV0JDAIXJioPMEZQaxJd6Kkqfe1RTNxfquWNRBFo6
24684 oV0qbvNQ6BQxjP/4TOGSpBSKUDQVEH2awHrTupKa9KQoTWl0AgIAOw==
24686 logo = PhotoImage(data=ADIlogo)
24687 ADI1 = Label(frame2r, image=logo, anchor=
"sw", compound=
"top")
24688 ADI1.pack(side=TOP)
24692 if ButtonOrder == 1:
24693 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
24694 CHAlab.pack(side=LEFT)
24695 CHAsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHvpdiv, command=BCHAlevel)
24697 CHAsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24698 CHAsb.bind(
"<Button-4>", onSpinBoxScroll)
24699 CHAsb.bind(
"<Button-5>", onSpinBoxScroll)
24700 CHAsb.pack(side=LEFT)
24701 CHAsb.delete(0,
"end")
24702 CHAsb.insert(0,0.5)
24704 if ButtonOrder == 0:
24705 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
24706 CHAlab.pack(side=LEFT)
24708 if ButtonOrder == 1:
24709 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
24710 CHAofflab.pack(side=LEFT)
24711 CHAVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24712 CHAVPosEntry.bind(
"<Return>", BOffsetA)
24713 CHAVPosEntry.bind(
'<MouseWheel>', onTextScroll)
24714 CHAVPosEntry.bind(
"<Button-4>", onTextScroll)
24715 CHAVPosEntry.bind(
"<Button-5>", onTextScroll)
24716 CHAVPosEntry.bind(
'<Key>', onTextKey)
24717 CHAVPosEntry.pack(side=LEFT)
24718 CHAVPosEntry.delete(0,
"end")
24719 CHAVPosEntry.insert(0,2.5)
24720 if ButtonOrder == 0:
24721 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
24722 CHAofflab.pack(side=LEFT)
24724 if ButtonOrder == 1:
24725 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
24726 CHAIlab.pack(side=LEFT)
24727 CHAIsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHipdiv, command=BCHAIlevel)
24728 CHAIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24729 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
24730 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
24731 CHAIsb.pack(side=LEFT)
24732 CHAIsb.delete(0,
"end")
24733 CHAIsb.insert(0,50.0)
24734 if ButtonOrder == 0:
24735 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
24736 CHAIlab.pack(side=LEFT)
24738 if ButtonOrder == 1:
24739 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
24740 CHAIofflab.pack(side=LEFT)
24741 CHAIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24742 CHAIPosEntry.bind(
"<Return>", BIOffsetA)
24743 CHAIPosEntry.bind(
'<MouseWheel>', onTextScroll)
24744 CHAIPosEntry.bind(
"<Button-4>", onTextScroll)
24745 CHAIPosEntry.bind(
"<Button-5>", onTextScroll)
24746 CHAIPosEntry.bind(
'<Key>', onTextKey)
24747 CHAIPosEntry.pack(side=LEFT)
24748 CHAIPosEntry.delete(0,
"end")
24749 CHAIPosEntry.insert(0,0.0)
24750 if ButtonOrder == 0:
24751 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
24752 CHAIofflab.pack(side=LEFT)
24754 if ButtonOrder == 1:
24755 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
24756 CHBlab.pack(side=LEFT)
24757 CHBsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHvpdiv, command=BCHBlevel)
24758 CHBsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24759 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
24760 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
24761 CHBsb.pack(side=LEFT)
24762 CHBsb.delete(0,
"end")
24763 CHBsb.insert(0,0.5)
24765 if ButtonOrder == 0:
24766 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
24767 CHBlab.pack(side=LEFT)
24769 if ButtonOrder == 1:
24770 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
24771 CHBofflab.pack(side=LEFT)
24772 CHBVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24773 CHBVPosEntry.bind(
"<Return>", BOffsetB)
24774 CHBVPosEntry.bind(
'<MouseWheel>', onTextScroll)
24775 CHBVPosEntry.bind(
"<Button-4>", onTextScroll)
24776 CHBVPosEntry.bind(
"<Button-5>", onTextScroll)
24777 CHBVPosEntry.bind(
'<Key>', onTextKey)
24778 CHBVPosEntry.pack(side=LEFT)
24779 CHBVPosEntry.delete(0,
"end")
24780 CHBVPosEntry.insert(0,2.5)
24781 if ButtonOrder == 0:
24782 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
24783 CHBofflab.pack(side=LEFT)
24785 if ButtonOrder == 1:
24786 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
24787 CHBIlab.pack(side=LEFT)
24788 CHBIsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHipdiv, command=BCHBIlevel)
24789 CHBIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
24790 CHBIsb.bind(
"<Button-4>", onSpinBoxScroll)
24791 CHBIsb.bind(
"<Button-5>", onSpinBoxScroll)
24792 CHBIsb.pack(side=LEFT)
24793 CHBIsb.delete(0,
"end")
24794 CHBIsb.insert(0,50.0)
24795 if ButtonOrder == 0:
24796 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
24797 CHBIlab.pack(side=LEFT)
24799 if ButtonOrder == 1:
24800 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
24801 CHBIofflab.pack(side=LEFT)
24802 CHBIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
24803 CHBIPosEntry.bind(
"<Return>", BIOffsetB)
24804 CHBIPosEntry.bind(
'<MouseWheel>', onTextScroll)
24805 CHBIPosEntry.bind(
"<Button-4>", onTextScroll)
24806 CHBIPosEntry.bind(
"<Button-5>", onTextScroll)
24807 CHBIPosEntry.bind(
'<Key>', onTextKey)
24808 CHBIPosEntry.pack(side=LEFT)
24809 CHBIPosEntry.delete(0,
"end")
24810 CHBIPosEntry.insert(0,0.0)
24811 if ButtonOrder == 0:
24812 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
24813 CHBIofflab.pack(side=LEFT)
24815 if ShowBallonHelp > 0:
24816 CHAlab_tip =
CreateToolTip(CHAlab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
24817 CHBlab_tip =
CreateToolTip(CHBlab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
24818 CHAIlab_tip =
CreateToolTip(CHAIlab,
'Select CHA-I vertical range/position axis to be used for markers and drawn color')
24819 CHBIlab_tip =
CreateToolTip(CHBIlab,
'Select CHB-I vertical range/position axis to be used for markers and drawn color')
24820 CHAofflab_tip =
CreateToolTip(CHAofflab,
'Set CHA-V position to DC average of signal')
24821 CHBofflab_tip =
CreateToolTip(CHBofflab,
'Set CHB-V position to DC average of signal')
24822 CHAIofflab_tip =
CreateToolTip(CHAIofflab,
'Set CHA-I position to DC average of signal')
24823 CHBIofflab_tip =
CreateToolTip(CHBIofflab,
'Set CHB-I position to DC average of signal')
24829 root.geometry(
'+300+0')
24830 root.protocol(
"WM_DELETE_WINDOW", Bcloseexit)
24832 if not numpy_found:
24834 showwarning(
"WARNING",
"Numpy not found!")
24839 BoardStatus = IntVar(0)
24844 if EnableScopeOnly == 0:
24847 AWGScreenStatus.set(1)
24850 if LocalLanguage !=
"English":
24858 showwarning(
"WARNING",
"Pysmu not found!")